Java - Ein Objekt bewegen

N302OO7

Mitglied
hey

wie bewege ich ein Obejkt (Rechteck, Kreis usw...) in Java

Also erstmal vom Prinzip her, wie mache ich das Muss ich das Objekt löschen und dann neu zeichnen lassen mit andere x,y Daten oder wie macht man das

Ein Beispiel wäre nett, einfach ein Recheck um z.B. 50 auf der x & der y Achse zu verschieben.


greetz
 
Applet - Rahmen begrenzen + anti laggen

Hi,
ich habe hier mal ein einfaches Programm, in dem sich ein Viereck bewegt, das Viereck habe ich einfach mit Graphics g gezeichnet:

Code:
import java.applet.*;
import java.awt.*;

  public class Viereck extends Applet implements Runnable {
   int x=10;
   int y=100;
   boolean richtung=true;

   public void init()  {
    setBackground (Color.white);
   }

   public void start () {
    Thread th = new Thread (this);
    th.start();
   }

   public void run () {
    while (true) {
     while (richtung==true) {
      x++;
      y++;
      repaint();
      try {
       Thread.sleep(10);
      } catch (InterruptedException e) { }
      if (y==200) {
       richtung = false;
      }
     }
     while (richtung==false) {
      x++;
      y--;
      repaint();
      try {
       Thread.sleep(10);
      } catch (InterruptedException e) { }
      if (y==100) {
       richtung = true;
      }
     }
    }
   }

   public void paint (Graphics g) {
    g.setColor(Color.black);
    g.fillRect(x,y,50,50);
   }
  }

Ich habe 2 Probleme:
1. Wie begrenze ich den Rand
Also oben und unten habe ich ja schon eingegrenzt mit 100 & 200. Wie mache ich das Ganze jetzt, wenn ich auch noch will, dass das Viereck bei Berührung des Randes (width="400" height="300") sich wieder in die andere Richtung bewegt?
2. Wenn ihr das ganze laufen lasst, werdet ihr feststellen, dass das Viereck ziemlich laggt, wie schalte ich das aus


Greetz
 
Dein Rechteck bewegt scih immer weiter nach rechts kann das sein? ^^

Wie waere es wenn du anstatt zu pruefen ob richtung false oder true ist, die position von dem Rechteck zu pruefen.
xPos < 0 dann x++
xPos +breite viereck > 400 dann x--
das gleiche dann mit y und der Hoehe von Rechteck.

Hab ma ganz schnell nen Beispiel rausgesucht aber mit nem Ball.
http://www.blue-board.de/Farin/Java-Kurs/animation.htm
 
Etwas genauer bitte. Hast du ma das mit dem Ball durchgearbeitet? Zum laufen gebracht? Es ist doch im Prinzip das gleiche nur dann mit nem Rechteck?

Schau ma bei Ball1.java dort auf der Seite, genau das was du brauchst!
Java:
    //Die Run-Methode enthält den Code zur Thread-Steuerung
    public void run()
    {
       while (true)
       {
            while (stop==false)
            {
               //Veränderung der Koordinaten
                x =x + vx;
                y =y + vy;
                //Wenn der Ball links oder rechts anstößt, ändert er die Richtung
                if (x < 0)
                {
                     x = 0;
                     vx = -vx;
                }
                else if(x > breite - 20)
                {
                      x = breite -20;
                      vx= -vx;
                }
                //Wenn der Ball oben oder unten anstößt, ändert er die Richtung
                if (y < 0)
                {
                      y = 0;
                      vy = -vy;
                }
                else if (y > hoehe - 20)
                {
                      y = hoehe - 20;
                      vy = -vy;
                }
                repaint();
                pause(50);

            }
        }
    }
 
Zuletzt bearbeitet:
Hallo
Ich soll für den Informatikunterricht der 11. Klasse eine Billardsimulation mit BlueJ programmieren, dafür soll ich die Sum.kern.* Klassenbibliothek benutzen. Mein Ball fliegt auch ganz wunderbar und prallt brav von allen Seiten ab, nur ruckelt er dabei fürchterlich. Leider steht mir die Methode repaint() nicht zur Verfügung. Auch treat.sleap() (oder wie man das schreibt...) soll ich nicht benutzen. Ich poste mal was ich bis jetzt habe, ich hoffe ihr könnt mir helfen das das ganze eher wie ein sich bewegender Ball aussieht.
Vielen Dank

P:S. Die Methode bewegen in der der "Ball" sich bewegt ist ganz unten

Code:
 import sum.kern.*;
/**
 * @Ruben
 * @version 
 */
public class Kugel
{
    // Bezugsobjekte
    private Stift hatStift;
    private Bildschirm kenntBildschirm;                                                                                                                                                     
     // Attribute
    int zgroesse;
    double zgeschwindigkeit;
    double zwinkel;
      
    // Konstruktor
    
    public Kugel(int groesse, double geschwindigkeit, int hPosition, int vPosition)
    {
        zgeschwindigkeit = geschwindigkeit;
        zgroesse = groesse; 
        hatStift = new Stift();
        hatStift.bewegeBis(hPosition, vPosition);
      
    }

    // Dienste
    public void gibFrei()
    {

        hatStift.gibFrei();
    }

    public void zeichne()
    {
       
        hatStift.zeichneKreis(zgroesse);
    }

    public void loesche()
    {
        hatStift.radiere();
        this.zeichne();
        hatStift.normal();
    }
    
    public double hPosition()
    {
     return hatStift.hPosition();
    }
        
    public double vPosition()
    {
     return hatStift.vPosition();
    }
    
    private boolean linkerRand()
    {
        if(this.hPosition() <= 102 + zgroesse){
            return true;
        }else{
            return false;
        }
    }
        
    private boolean rechterRand()
    {
          if(this.hPosition() >= 899 - zgroesse){
            return true;
        }else{
            return false;
        }
    }
    
    private boolean obererRand()
    { 
        if(this.vPosition() <= 201 + zgroesse){
            return true;
        }else{
            return false;
        }
    }

    private boolean untererRand()
    { 
        if(this.vPosition() >= 499 - zgroesse){
            return true;
        }else{
            return false;
        }
    }
    
    public void setzeRichtung(double pRichtung){
        hatStift.dreheBis(pRichtung);
    }
   
    public void bewege()
    {
        
        this.loesche();
        hatStift.bewegeUm(zgeschwindigkeit);
        if(this.rechterRand() == true || this.linkerRand() == true){
            hatStift.dreheBis(180 - hatStift.winkel());
        }
       else if (this.obererRand() == true || this.untererRand() == true)
       { 
          hatStift.dreheBis(360 - hatStift.winkel());
       
    }
    
     this.zeichne();
}
}
 
Zurück