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(); 
    } 
} 

In der Schule benutze ich einen Mac und zu Hause benutze ich einen PC mit Windows 10 darauf. Auf dem Mac tendiert dieser Code dazu, sich von der Windows-Version zu unterscheiden. In der Mac-Version läuft alles wie erwartet, wobei sich das Zeichen (Quadrat) bei jedem Tastendruck nur ein wenig bewegt. Unter Windows jedoch, wenn Sie eine beliebige Richtung (wie d) drücken, bewegt sich der Charakter weiter nach rechts, obwohl er nur einmal aufgerufen werden sollte. Nicht nur das, auch der Rahmen flackert ständig beim Malen. Also habe ich mich gefragt, warum es einen Unterschied zwischen den Versionen zwischen Mac und Windows gab und wie ich das Flicker-Problem unter Windows beheben könnte. Ich habe vor, die Methoden keyPressed und keyReleased später hinzuzufügen, damit ich keine Probleme damit habe.Java - Spielcode unterscheidet zwischen Mac und Windows

+1

Dies könnte bei Ihrem Flimmerproblem helfen. http://stackoverflow.com/questions/10869548/image-flickers-on-repaint Das Flackern ist üblich und die beste Strategie ist es, ein Pufferbild zu verwenden, so dass immer ein Bild auf dem Bildschirm ist, anstatt die Szene vor dem Neulackieren zu löschen. – Chris

Antwort

2

AWT kann sich anders verhalten je nach Betriebssystem, siehe this post:

AWT ist eine Java-Schnittstelle zu nativen System GUI-Code in Ihrem OS. Es wird nicht auf jedem System das gleiche funktionieren, obwohl es versucht.

5

Die wichtigsten Ereignisse unterscheiden sich zwischen den Betriebssystemen. Windows kann typisierte Ereignisse schnell erstellen, wenn ein Schlüssel nicht aktiv ist, wenn Mac OS nur einen erstellt.

Die Lösung ist key bindings anstelle der wichtigsten Ereignisse zu verwenden, obwohl Sie etwas Glück kann eine Kombination aus keyPressed und keyReleased zu finden, die für beide Betriebssysteme arbeiten (würde vorschlagen, immer noch nur Tastenbelegungen verwenden).

+0

Ich werde das dann anschauen, danke. – Phil

Verwandte Themen