2017-03-01 3 views
3
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でゲームの動作が異なる

+1

これは、ちらつきの問題に役立ちます。 http://stackoverflow.com/questions/10869548/image-flickers-on-repaintちらつきが一般的です。最良の方法は、再描画する前にシーンを削除するのではなく、常に画像が画面に表示されるようにバッファイメージを使用することです。 – Chris

答えて

2

AWTは、OSに応じて、異なる動作をすることができ、参照this post

AWTは、お使いのOSでネイティブシステムのGUIコードに存在するJavaインタフェースです。それは試みても、すべてのシステムで同じように動作しません。

5

重要なイベントはオペレーティングシステムによって異なります。 Mac OSが1つしか作成できないときにキーが押されたときに、Windowsは入力されたイベントをすばやく作成することがあります。

解決策はキーイベントの代わりにkey bindingsを使用することですが、どちらのオペレーティングシステムでも動作するkeyPressedkeyReleasedの組み合わせが見つかることはありますが、キーバインディングだけを使用することをお勧めします。

+0

それから私はそれを見ていきます、ありがとう。 – Phil

関連する問題