首页 文章

Java游戏:Sprite不会显示

提问于
浏览
0

正如我之前提出的大多数问题都指出的那样,我正在开发一个简单的Java游戏 . 这是一个“Pong”克隆 .

目前我在屏幕上有两个蓝色“拨片”(一个在屏幕顶部,一个在底部),由左右箭头键控制,“a”和“d”键在x轴上移动 .

还有“乒乓球”飞来飞去,并对桨叶和墙壁的碰撞作出反应 .

现在,每当按下按钮时,我都试图让桨射出导弹 . 当按下VK_SPACE时,底部桨叶射击导弹,并且每当按下VK_SHIFT时顶部桨叶射击导弹 .

我用底板成功了 . 当按下空格按钮时,它确实会发射导弹 .

但顶部桨不会发生 . 这是一些代码:

In the Board class, which runs most of the game. It implements KeyListener:

public void keyPressed(KeyEvent e) {

        int key = e.getKeyCode();           
        if(key==KeyEvent.VK_LEFT || key==KeyEvent.VK_RIGHT) bPaddle.keyPressed(e);
        if(key==KeyEvent.VK_A || key==KeyEvent.VK_D) tPaddle.keyPressed(e);
        if(key == KeyEvent.VK_SPACE) bPaddle.keyPressed(e);
        if(key == KeyEvent.VK_SHIFT) tPaddle.keyPressed(e);

}

In the Paddle class

public void keyPressed(KeyEvent e){

        int key = e.getKeyCode();

        // Some code that happens when the arrow keys or a/d keys are pushed.
        // ..........
        // ..........

        if(key == KeyEvent.VK_SPACE){
            missiles.add(new Missile(x, 300, "bottom"));
        }

        if(key == KeyEvent.VK_SHIFT){
            missiles.add(new Missile(x, 400, "bottom"));
        }

}

The Constructor of the Missile class:

public Missile(int x, int y, String type){  
        this.x = x;
        this.y = y;

        image = new ImageIcon(this.getClass().getResource("sprites/missile.png")).getImage();

        width = image.getWidth(null);
        height = image.getHeight(null);

        dx = 0;
        if(type=="top")dy=3;
        if(type=="bottom")dy=-3;    
        visible = true;

}

可能是什么问题呢? (如果我需要在这里发布更多代码,请告诉我) . 谢谢 :)

2 回答

  • 0

    在导弹构造函数中:

    • 您是否检查过代码是否正在执行?你检查了dy的值吗?如果dx和dy的值为零,即使执行代码,也不会有任何移动 .

    • 不要将 "==" 用于对象(字符串)比较 . 使用 equals(...) 方法 . 我的猜测是设置dy的值永远不会被执行的代码 .

    在keyPressed()代码中,你检查是否正在处理VK_SHIFT键事件?您是否使用调试器来遵循逻辑流程或添加println()语句?

  • 0

    我怀疑问题是这个块:

    if(key == KeyEvent.VK_SHIFT){
        missiles.add(new Missile(x, 400, "bottom"));
    }
    

    因为VK_SHIFT用于请求顶部拨片触发,所以在调用此块的导弹构造函数时,是否应该用 "top" 替换_769629?

相关问题