import java.awt.*;
import java.awt.event.*;
import javax.swing.JFrame;
public class Game extends JFrame implements KeyListener
{
private int charX;
private int charY;
public Game()
{
charX = 250;
charY = 450;
this.setSize(500, 500);
addKeyListener(this);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void keyTyped(KeyEvent event)
{
if(event.getKeyChar() == 'a')
charX-=5;
else if(event.getKeyChar() == 'd')
charX+=5;
else if(event.getKeyChar() == 'w')
charY-=5;
else if(event.getKeyChar() == 's')
charY+=5;
if(charX > 485)
charX-=6;
else if(charX < 10)
charX+=6;
if(charY > 485)
charY-=6;
else if(charY < 30)
charY+=6;
repaint();
}
public void keyPressed(KeyEvent event)
{
}
public void keyReleased(KeyEvent event)
{
}
public void paint(Graphics g)
{
super.paint(g);
g.setColor(Color.BLACK);
g.fillRect(charX, charY, 10, 10);
}
public static void main(String args[])
{
Frame frm = new Game();
frm.setVisible(true);
frm.repaint();
}
}
私はMacを使い、家庭ではWindows 10搭載のPCを使用しています。 Macでは、このコードはWindows版とは異なる動作をする傾向があります。 Mac版では、キーの押下ごとにキャラクター(四角形)を少し動かすだけで、物事は予想どおりに動きます。ただし、Windowsでは、dのようないずれかの方向を押すと、一度呼び出されたにもかかわらず文字は右に移動し続けます。それだけでなく、絵を描くときにフレームが絶えずちらつきます。だから私はMacとWindowsの間のバージョンの違いと、Windows上でのフリッカーの問題の修正方法について、なぜ違いがあるのだろうと思っていました。後でkeyPressedメソッドとkeyReleasedメソッドを追加する予定です。それで、あまり時間がないとは思えません。Java - MacとWindowsでゲームの動作が異なる
これは、ちらつきの問題に役立ちます。 http://stackoverflow.com/questions/10869548/image-flickers-on-repaintちらつきが一般的です。最良の方法は、再描画する前にシーンを削除するのではなく、常に画像が画面に表示されるようにバッファイメージを使用することです。 – Chris