首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PacMan游戏移动

PacMan游戏移动
EN

Stack Overflow用户
提问于 2012-10-10 18:11:37
回答 4查看 1.3K关注 0票数 0

我正在用Java创建一个吃豆人游戏,我有一个无法摆脱的问题。问题如下:

我有4个按钮在游戏屏幕上的每一种方式:向上,向下,左,右。问题是我不能同时在x位置和y位置使用按钮,因为我总是得到0的值(如果你看下面的代码,你会明白这一点)。

下面你可以找到我的关于吃豆人的类,我认为它与这个问题有关(参见setBesturing(整数赋值)方法)

代码语言:javascript
复制
package h04PacMan;

/*
 * PacMan laten bewegen
 */

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

public class PacMan extends JPanel implements ActionListener {

private int horizontalePlaats = 250; // x location
private int verticalePlaats = 150; // y location
private int richtingEnSnelheid = +10; // speed
private final int WACHTTIJD = 500; // DELAY
int diameter;
int waarde;

public PacMan() {

    // create timer and start timer
            javax.swing.Timer autoKlik = new javax.swing.Timer(WACHTTIJD, this);

            autoKlik.start();
}

public int getHorPlaats() {
    return horizontalePlaats;
}

// current y positie

public int getVerPlaats() {
    return verticalePlaats;
}

// speed and way;
public int getRichtingEnSnelheid() {
    return richtingEnSnelheid;
}

// new x position

public void setHorPlaats(int nieuweHorPlaats) {

    if(nieuweHorPlaats > getWidth()) {

        nieuweHorPlaats = 0;
    }
    else if(nieuweHorPlaats < 0) {

        nieuweHorPlaats = getWidth();
    }

    horizontalePlaats = nieuweHorPlaats;

}

// new y position 
public void setVerPlaats(int nieuweVerPlaats) {

    if(nieuweVerPlaats > getHeight()) {

        nieuweVerPlaats = 0;
    }
    else if(nieuweVerPlaats < 0) {

        nieuweVerPlaats = getHeight();
    }

    verticalePlaats = nieuweVerPlaats;

}

public void setRichtingEnSnelheid(int nieuweRichtingEnSnelheid) {

    richtingEnSnelheid = nieuweRichtingEnSnelheid;

}

//movement
public void setBesturing(int besturing) {

    besturing = waarde;

    if(waarde == 0) {
        setVerPlaats( getVerPlaats() + richtingEnSnelheid);
    }
    else if(waarde == 1){
        setHorPlaats( getHorPlaats() + richtingEnSnelheid);
    }
}

@Override
public void actionPerformed(ActionEvent e) {

    setBesturing(waarde);
    System.out.println(waarde);
    repaint();

}

DrawPacMan pacman = new DrawPacMan();
DrawPacMan ghost1 = new DrawPacMan();
DrawPacMan ghost2 = new DrawPacMan();

public void paintComponent(Graphics g) {

    super.paintComponent(g);
    // pacman movement
    diameter = 75;  
    pacman.drawPacMan(g, getHorPlaats(), getVerPlaats(), diameter, Color.yellow);

    // ghosts movement
    int g1x;
    for(g1x = 0; g1x < 10; g1x++) {

        pacman.drawGhost(g, g1x, 40, diameter, Color.red);

    }
    pacman.drawGhost(g, 170, 70, diameter, Color.blue);


}

}

这是我的游戏控制类中的actionListener

代码语言:javascript
复制
    @Override
public void actionPerformed(ActionEvent e) {

    if(e.getSource() == links) {

        pacman.setRichtingEnSnelheid( -10 );
        pacman.setBesturing(1);
        System.out.println("links");
    }
    else if(e.getSource() == rechts) {
        pacman.setRichtingEnSnelheid( +10 );
        pacman.setBesturing(1);
        System.out.println("rechts");
    }
    else if(e.getSource() == boven) {
        pacman.setRichtingEnSnelheid( -10);
        pacman.setBesturing(0);
        System.out.println("boven");
    }
    else {
        pacman.setRichtingEnSnelheid( +10);
        pacman.setBesturing(0);
        System.out.println("beneden");
    }


}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-10-10 18:18:29

这就是你的问题:

代码语言:javascript
复制
//movement
public void setBesturing(int besturing) {

    besturing = waarde; <-- THIS LINE

    if(waarde == 0) {
        setVerPlaats( getVerPlaats() + richtingEnSnelheid);
    }
    else if(waarde == 1){
        setHorPlaats( getHorPlaats() + richtingEnSnelheid);
    }
}

您正在用旧值waarde覆盖besturing的值。应该是另一种方式。

代码语言:javascript
复制
//movement
public void setBesturing(int besturing) {

    waarde = besturing; <-- THIS LINE

    if(waarde == 0) {
        setVerPlaats( getVerPlaats() + richtingEnSnelheid);
    }
    else if(waarde == 1){
        setHorPlaats( getHorPlaats() + richtingEnSnelheid);
    }
}
票数 3
EN

Stack Overflow用户

发布于 2012-10-10 18:21:11

我认为在方法setBesturing(整型赋值)中应该是:

代码语言:javascript
复制
waarde = besturing;
票数 3
EN

Stack Overflow用户

发布于 2012-10-10 18:20:58

在你的setBesturing方法中:

代码语言:javascript
复制
besturing = waarde;

此行从不更改waarde的值。它始终为零。

你应该用另一种方式来完成赋值:-

代码语言:javascript
复制
this.waarde = besturing;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12816914

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档