Swing のペイント技術 paintComponent() メソッドを使用してゲームを書き直すことにしました (SO の誰かが実際にこのメソッドを使用するように言いました)。Canvas の代わりに JPanel をゲームのベースとして使用することにしました。以前に作成したゲームは Canvas を使用していますが、64 ビットのデスクトップではゲームが表示されませんでしたが、32 ビットのラボトップでは表示される可能性があったため、このゲームを書き直す必要がありました。
問題は、船の動きが機能している間、描画が非常に遅いように見えることです(ラップトップの問題でない限り)、以前にAWTのダブルバッファリング描画技術を使用していたものと比較して. 私は丸一日を費やしましたが、何が船をより速く走らせることができるのかを理解できませんでした.
public class Ship extends JLabel implements KeyListener{
private Image image;
private boolean turnRight;
private int x;
private int y;
private int speed = 5;
private boolean turnLeft;
public Ship(int x, int y)
{
this.x = x;
this.y = y;
try {
image = ImageIO.read(new File("Ship/Ship.PNG"));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
addKeyListener(this);
}
public Image getImage()
{
return image;
}
@Override
public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub
if(e.getKeyCode() == KeyEvent.VK_RIGHT)
{
x += speed;
setTurnRight(true);
setTurnLeft(false);
}
else if(e.getKeyCode() == KeyEvent.VK_LEFT)
{
x -= speed;
setTurnLeft(true);
setTurnRight(false);
}
// redraw yourself
repaint();
}
private void setTurnLeft(boolean turnLeft) {
// TODO Auto-generated method stub
this.turnLeft = turnLeft;
}
// swing custom painting
public void paintComponent(Graphics g)
{
if(x <= 0)
{
x = 0;
}
else if(x >= 610)
{
x = 610;
}
g.drawImage(getImage(), x, y, null);
}
public void setTurnRight(boolean turnRight)
{
this.turnRight = turnRight;
}
public boolean getTurnLeft()
{
return turnLeft;
}
public boolean getTurnRight()
{
return turnRight;
}
@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
}
@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
}
}