对象赢了';在java swing中,t出现在按键上

对象赢了';在java swing中,t出现在按键上,java,swing,Java,Swing,因此,我尝试使用swing在Java中制作一个非常简单的游戏。这是一个太空入侵者类型的游戏,我已经成功地在太空船上编码,它可以左右移动。然而,我有很多麻烦让“镜头”出现 我现在还不想定位它,我真的只是想在按键上创建一个对象来让它工作。我假设,因为它最初不是在“绘制”方法中,所以它不会出现。但我不知道怎么让它出现!有什么想法吗 以下是当前代码供参考: public void keyPressed(KeyEvent e) { if (KeyEvent.VK_RIGHT == e.getKey

因此,我尝试使用swing在Java中制作一个非常简单的游戏。这是一个太空入侵者类型的游戏,我已经成功地在太空船上编码,它可以左右移动。然而,我有很多麻烦让“镜头”出现

我现在还不想定位它,我真的只是想在按键上创建一个对象来让它工作。我假设,因为它最初不是在“绘制”方法中,所以它不会出现。但我不知道怎么让它出现!有什么想法吗

以下是当前代码供参考:

public void keyPressed(KeyEvent e) {
    if (KeyEvent.VK_RIGHT == e.getKeyCode()) {
        moveRight();
    }
    if (KeyEvent.VK_LEFT == e.getKeyCode()) {

        moveLeft();
    }
    if (KeyEvent.VK_SPACE == e.getKeyCode()) {
        shoot();

    }
}

public void shoot() {
    Laser laser = new Laser(new Point(200, 200));
    this.repaint();
}

public void moveLeft() {
    if (player.getCentre().getX() <= 20) {
        player.setX(20);
    } else {
        double movement = player.getCentre().getX();
        movement -= 10;
        player.setX(movement);
    }
    this.repaint();
}

@Override
public void paint(Graphics g) {
    setBackground(Color.black);
    super.paint(g);
    player.draw(g);

}
按下公共无效键(按键事件e){ if(KeyEvent.VK_RIGHT==e.getKeyCode()){ moveRight(); } if(KeyEvent.VK_LEFT==e.getKeyCode()){ 左移(); } if(KeyEvent.VK_SPACE==e.getKeyCode()){ 射击(); } } 公开射击(){ 激光=新激光(新点(200200)); 这个。重新绘制(); } 公共空间左移(){ 如果(player.getcenter().getX()问题/建议:

  • 你的shoot方法创建一个对象很好,但是完全忽略了它。你不会将你新创建的Laser对象添加到任何东西中,不会添加到类的字段中,不会添加到任何ArrayList,也不会添加到任何其他集合中,因此类将不知道该对象是否存在,一旦创建它的方法结束,该对象将被删除imed用于垃圾收集,因为它只存在于方法的本地
  • 我们不知道你的KeyListener是否工作。你用println语句调试过这部分吗?如果没有,我会这么做
  • 一般来说,我会避免使用键盘监听器,因为后者对于焦点要求不那么烦躁
  • 一般来说,不要重写JPanel的paint方法,而要重写它的
    paintComponent
    方法,并确保在重写中调用super的方法
  • 您的GUI将只绘制您告诉它绘制的内容,当前您的绘制方法只要求绘制玩家的状态,而不要求绘制其他内容。如果您想要激光喷射绘制,则绘制方法应为
    受保护的void paintComponent(Graphics g)
    覆盖,而不是
    公共void绘制(图g)
    override,应包含执行此操作的代码

由于您发布了一段我们无法编译或运行的代码片段,因此我们提供的任何建议都有点有限。如果这些建议不能为您提供答案,请创建并发布一个小而简单的完整程序来说明您的问题,一个。请查看链接以了解此非常有用的工具的详细信息。

I apologize关于这个小片段。我是新来的,我不想被太多的代码淹没。我可以确认KeyListener工作正常,因为我已经用System.out.println测试过了。在这里发布github有用吗?因为我有3个类在这里交互。谢谢你的帮助,非常感谢!@SatoNaka55:不,你不被允许要做到这一点,本网站本身不是帮助网站,而是问答网站,这是一个重要的区别,因为问题的质量和未来的实用性很重要。你仍然可以创建一个有3个类的小网站,但它不应该是你的整个程序。相反,它应该只有足够的代码来允许它编译、运行和反编译演示问题,不要再说了。它可能使用的任何图像都应该从web URL获得,这样我们就可以不经修改地运行它。@SatoNaka55:旁注:不要从绘画方法中调用
setBackground(…)
,这是一种潜在的危险操作。相反,在创建组件时调用它一次。