我正在尝试制造太空入侵者,但在添加其他激光器时遇到了麻烦。我所有的代码都可以使用,但是我不确定在paintComponent被调用之后如何通过paint向面板添加其他对象。我主要想添加一个新方法newBullet(),可以调用该方法来创建可以通过重绘移动的矩形。
我尝试重新绘制矩形,但似乎没有显示。
// control ship movements and firing
private void shipMovements(KeyEvent event) {
int offset = 10;
int movement = event.getKeyCode();
switch(movement){
case 39:
shipX += offset;
break;
case 37:
shipX -= offset;
break;
case 32:
newBullet();
break;
}
repaint();
}
// creates base plate and ship
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.green);
g.setFont(new Font("Arial", Font.PLAIN,12));
g.drawString("Score: ", 0,20);
g.drawString(score.toString(),40,20);
ImageIcon icon = new ImageIcon(Main.class.getResource("spaceship.png"));
icon.paintIcon(this,g, shipX,shipY);
}
我想创建一个方法newBullet(),将子弹添加到可以通过重绘移动的面板上。
具有项目符号列表。
createBullet创建一个项目符号,并为其指定起始位置(并可能在每次重新计算时添加方向或x / y增量)。
某些方法将需要定期重新计算屏幕上事物的位置并检测碰撞。 (您仅在发生击键时才为飞船执行此操作)该方法将迭代项目符号列表并根据其速度更新每个项目符号的位置。
请注意,由于可能会丢帧,因此在绘制之间可能会多次发生位置重新计算。
然后在绘制方法中,迭代子弹链并将它们绘制在当前位置。