BlueJ で単純なゲームを開発しています。「スペース インベーダー」のようなものです。私の問題は、 の付いた UFO のようにオブジェクトを動かしてもKeyListener
、古い UFO が消えないことです!
フレームを更新するには、次のようにします。
public static void updateJframe()
{
SwingUtilities.updateComponentTreeUI(canvas);
}
canvas
Canvas
を拡張するクラスの変数ですJFrame
。
さらにコードが必要な場合は、問題なく投稿できます。
コメントにコードを投稿して申し訳ありません。私も初心者です:$
public class Inout
{
private static Canvas canvas;
private Motor motor;
public Inout()
{
motor = new Motor(); //in class "Motor" is the logic of the game
canvas = new Canvas();
}
public static void actualizar() //this is the method where i'm trying to update the frame
{
canvas.removeAll();
SwingUtilities.updateComponentTreeUI(canvas);
}
public class Canvas extends JFrame implements KeyListener
{
public Canvas ()
{
addKeyListener(this);
setFocusable(true);
setFocusTraversalKeysEnabled(false);
setTitle("Space Invaders");
setSize(1200,600);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public void paint(Graphics g)
{
int i = 0;
int j = 0;
for (i = 0; i < 30 ; i++)
{
for (j = 0; j < 50; j++)
{
if (Motor.cuadricula[i][j].esUfo())
{
g.setColor (Color.blue);
g.fillRect(i*40,j*20,20,15);
}
else if (Motor.cuadricula[i][j].esDef())
{
g.setColor (Color.red);
g.fillRect(i*40,j*20,20,15);}
}
}
}
}
public void keyPressed(KeyEvent e)
{}
public void keyReleased(KeyEvent e)
{
int keyCode = e.getKeyCode();
if(keyCode == KeyEvent.VK_P){
Motor.moverDef(1);//mover una casilla a la derecha
}
else if(keyCode == KeyEvent.VK_O){
Motor.moverDef(0);//mover una casilla a la izquierda
Inout.actualizar();
}
}
public void keyTyped (KeyEvent e){}
}
}
私が理解できないトピックは、「actualizar);」を使用する場合です。他のメソッドからのメソッドは問題なく動作しますが、KeyListener からのメソッドではバグが発生します。
助けてくれて本当にありがとうございます!!