2017-05-21 2 views
1

Vor der Zeit möchte ich sagen, dass es viele ähnliche Beiträge gegeben hat, aber keiner von ihnen trifft auf mich zu oder keiner von ihnen hat überhaupt eine Antwort und ist veraltet, was bedeutet, dass es neue Java-Features geben könnte das könnte mir helfen, mein Problem zu lösen.Wie rufe ich Graphics Method im KeyListener auf?

Wie auch immer, ich wollte ein Spiel machen, wo es Tennisschläger gibt. Natürlich müssten sie sich drehen. Um zu drehen, muss ich meine Graphics2D-Methode in meinem KeyListener aufrufen. Wie würde ich dies tun, OHNE eine neue Graphics2D-Variable innerhalb meiner Key-Listener-Methode hinzuzufügen?

Hier alle Methoden, die ich habe, dass dieses Ziel beinhaltet erreichen:

 public void draw(Graphics2D g2d) { 
      g2d.drawImage(getPaddleImg(), x, y, null); 
     } 

     public static Image getPaddleImg() { 
      ImageIcon ic = new ImageIcon("C:/Users/Elliot/Desktop/Eclipse Game Tennis/paddle.png"); 
      return ic.getImage(); 
     } 

     public void keyPressed(KeyEvent e) { 
      int key = e.getKeyCode(); 

      if(key==KeyEvent.VK_W){ 
       g2d.rotate(Math.toRadians(5)); 
      } else if(key==KeyEvent.VK_W) { 
       g2d.rotate(Math.toRadians(-5)); 
      } 

     public void keyReleased(KeyEvent e) { 
      int key = e.getKeyCode(); 

      if(key==KeyEvent.VK_W){ 
       g2d.rotate(Math.toRadians(0)); 
      } else if(key==KeyEvent.VK_W) { 
       g2d.rotate(Math.toRadians(0)); 
      } 
     } 

Ich weiß, würde dieser Code mir einen Fehler, weil die g2d innerhalb der KeyPressed() und KeyReleased() Methode. Wie würde ich die g2d innerhalb dieser beiden Methoden nennen? Oder wie würde ich das gleiche in der draw() Methode tun?

Antwort

2

Der falsche Weg: Sie können Component.getGraphics() verwenden, um das Grafikobjekt zu erhalten.

Der richtige Weg: Alle Gemälde sollten innerhalb der paint(Component) Methode durchgeführt werden. Dies liegt daran, dass ein Benutzer die Größe des Fensters jederzeit ändern/öffnen/schließen kann. In Ihrer KeyListener (auch Forschung Tastaturbelegungen) sollten Sie eine Einstellung aktualisieren, wie der Spieler/Schläger gezeichnet werden sollte, und rufen Sie dann repaint()

+0

Ich weiß, dass, aber wie greife ich auf das 'g2d' Variable? Ich schätze Ihre Hilfe dabei, aber das hilft mir nicht, die Variable in meiner Methode zu bekommen, es sei denn, ich verwende den "falschen" Weg –

+0

Alle (in meiner Erfahrung) Grafikobjekte können in Graphics2D umgewandelt werden – ControlAltDel

+0

meinst du '(Graphics2D) g 'wo' g' eine 'Graphics' Variable ist? –

0

OK! Ich habe es selbst herausgefunden! Was ich getan habe, ist die g2d.rotate(.....) innerhalb meiner draw() Methode. Was ich getan habe, sind erstellte Variablen, die nach Rotation suchen und sie innerhalb meiner KeyPressed()-Methode auf wahr oder falsch setzen. Hier ist der Code, den ich in der draw() Methode verwendet:

if(isRotatingPositive == true) { 
    g2d.rotate(Math.toRadians(speed)); 
} else if(isRotatingNegative == true) { 
    g2d.rotate(Math.toRadians(-speed)); 
} 
Verwandte Themen