对象赢了';在java swing中,t出现在按键上
因此,我尝试使用swing在Java中制作一个非常简单的游戏。这是一个太空入侵者类型的游戏,我已经成功地在太空船上编码,它可以左右移动。然而,我有很多麻烦让“镜头”出现 我现在还不想定位它,我真的只是想在按键上创建一个对象来让它工作。我假设,因为它最初不是在“绘制”方法中,所以它不会出现。但我不知道怎么让它出现!有什么想法吗 以下是当前代码供参考:对象赢了';在java swing中,t出现在按键上,java,swing,Java,Swing,因此,我尝试使用swing在Java中制作一个非常简单的游戏。这是一个太空入侵者类型的游戏,我已经成功地在太空船上编码,它可以左右移动。然而,我有很多麻烦让“镜头”出现 我现在还不想定位它,我真的只是想在按键上创建一个对象来让它工作。我假设,因为它最初不是在“绘制”方法中,所以它不会出现。但我不知道怎么让它出现!有什么想法吗 以下是当前代码供参考: public void keyPressed(KeyEvent e) { if (KeyEvent.VK_RIGHT == e.getKey
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方法,而要重写它的
方法,并确保在重写中调用super的方法paintComponent
- 您的GUI将只绘制您告诉它绘制的内容,当前您的绘制方法只要求绘制玩家的状态,而不要求绘制其他内容。如果您想要激光喷射绘制,则绘制方法应为
覆盖,而不是受保护的void paintComponent(Graphics g)
override,应包含执行此操作的代码公共void绘制(图g)
由于您发布了一段我们无法编译或运行的代码片段,因此我们提供的任何建议都有点有限。如果这些建议不能为您提供答案,请创建并发布一个小而简单的完整程序来说明您的问题,一个。请查看链接以了解此非常有用的工具的详细信息。I apologize关于这个小片段。我是新来的,我不想被太多的代码淹没。我可以确认KeyListener工作正常,因为我已经用System.out.println测试过了。在这里发布github有用吗?因为我有3个类在这里交互。谢谢你的帮助,非常感谢!@SatoNaka55:不,你不被允许要做到这一点,本网站本身不是帮助网站,而是问答网站,这是一个重要的区别,因为问题的质量和未来的实用性很重要。你仍然可以创建一个有3个类的小网站,但它不应该是你的整个程序。相反,它应该只有足够的代码来允许它编译、运行和反编译演示问题,不要再说了。它可能使用的任何图像都应该从web URL获得,这样我们就可以不经修改地运行它。@SatoNaka55:旁注:不要从绘画方法中调用
setBackground(…)
,这是一种潜在的危险操作。相反,在创建组件时调用它一次。