# Java - Ein Objekt bewegen



## N302OO7 (6. Juni 2009)

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


----------



## zeja (6. Juni 2009)

So zum Beispiel:
http://www.terrence.com/java/ball.html


----------



## N302OO7 (11. Juni 2009)

*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:


```
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


----------



## MiMi (11. Juni 2009)

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


----------



## N302OO7 (11. Juni 2009)

hi,

ich bekomme das trotzdem leider nicht hin


----------



## MiMi (12. Juni 2009)

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!

```
//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);

            }
        }
    }
```


----------



## I_am_on_a_boat (21. Januar 2010)

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


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


----------



## Thomas Darimont (25. Januar 2010)

Hallo,

schau mal hier:
http://www.tutorials.de/forum/java/...r-ein-brettspiel-mit-java-2d.html#post1320560

Gruß Tom


----------

