2017-04-19 2 views
0

Ich versuche die y-Position des Rechtecks ​​zu ändern, jedoch, wenn ich versuche, es erweitert/wird größer vertikal.Form vergrößert sich statt zu bewegen - Java (GUI applet)

public class PlayerPaddle implements Paddle { 

    double yVelocity; 
    final double GRAVITY = 0.94; 

    //move up/down faster (if not accelerating = slow down) 
    boolean upAccel, downAccel; 

    //determines if player 1 or player 2 (on left or on right) 
    int player; 

    //position of actual paddle 
    int x; 
    double y; 


    Rectangle panel; 

    public PlayerPaddle(int player) { 

     upAccel = false; 
     downAccel = false; 

     y = 210; //not moving initially 
     yVelocity = 0; 

     if (player == 1) { 
      //left side 
      x = 20; 
     } else { 
      //right side 
      x = 660; 
     } 
    } 


    @Override 
    public void draw(Graphics g) { 

     //draw paddle 
     g.setColor(Color.WHITE); 
     g.fillRect(x, (int) y, 20, 80); 
    } 


    @Override 
    public void move() { 

     if (upAccel) { 
      yVelocity -= 2; 
     } else if (downAccel) { 
      yVelocity += 2; 
     } else if ((!upAccel) && (!downAccel)) { 
      yVelocity *= GRAVITY; 
     } 
     y += yVelocity; //changes y position of paddle 
    } 

    public void setUpAccel(boolean input) { 
     upAccel = input; 
    } 

    public void setDownAccel(boolean input) { 
     downAccel = input; 
    } 

    @Override 
    public int getY() { 
     return (int) y; 
    } 
} 

Ich möchte wissen, wie man das Rechteck vertikal auf und ab bewegen kann. Eine ähnliche Frage hatte nur eine Antwort, die besagte, dass das zuvor gemalte Rechteck nicht gelöscht wurde und sich deshalb ausdehnt. Aber selbst wenn ich g.clearRect (...) sage, dehnt es sich immer noch aus und bewegt sich nicht.

Ich bin neu in Swing und Awt, aber ich bin wirklich zum Lernen verpflichtet. Danke für die Hilfe.

Antwort

1

Eine ähnliche Frage hatte nur eine Antwort, die sagte, dass das zuvor gestrichene Rechteck nicht gelöscht wurde und als Folge

Und das ist wahrscheinlich immer noch das Problem hier expandiert.

Irgendwo, nicht im hier vorgestellten Code, müssen Sie die draw(...) Methode dieser Klasse aufrufen.

Also in diesem Code müssen Sie sicherstellen, dass der Hintergrund der Komponente gelöscht wird, bevor Sie das Paddel zeichnen. Da Sie die paintComponent(...) Methode einer Platte überschrieben werden sollte, benutzerdefinierte Malerei Code zu tun, sollte etwas wie folgt aussehen:

@Override 
protected void paintComponent(Graphics g) 
{ 
    super.paintComponent(g); 
    // draw the paddle 
} 

Lesen Sie den Abschnitt aus der Swing-Tutorial auf Custom Painting für weitere Informationen und Arbeitsbeispiele.

Ich bin neu in Swing und Awt, aber ich bin wirklich zu lernen verpflichtet.

Dann halten Sie einen Link zum Tutorial praktisch für alle Swing-Grundlagen.

+0

Danke für die Hilfe :) – badProgrammer

+0

Oh mein Schlechter, nur tat – badProgrammer