重新绘制其他对象

问题描述 投票:0回答:1

我正在尝试制造太空入侵者,但在添加其他激光器时遇到了麻烦。我所有的代码都可以使用,但是我不确定在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(),将子弹添加到可以通过重绘移动的面板上。

java swing paintcomponent repaint
1个回答
0
投票

具有项目符号列表。

createBullet创建一个项目符号,并为其指定起始位置(并可能在每次重新计算时添加方向或x / y增量)。

某些方法将需要定期重新计算屏幕上事物的位置并检测碰撞。 (您仅在发生击键时才为飞船执行此操作)该方法将迭代项目符号列表并根据其速度更新每个项目符号的位置。

请注意,由于可能会丢帧,因此在绘制之间可能会多次发生位置重新计算。

然后在绘制方法中,迭代子弹链并将它们绘制在当前位置。

© www.soinside.com 2019 - 2024. All rights reserved.