G
Guest
Gast
hallo
ich habe mir ein tutorial zur spieleentwicklung angeschaut, bei dem in einem applet ein kreis von links nach rechts bewegt wird.
jetzt hab ich mal ein bischen rumgespielt und einen 2 kreis hinzugefügt. ich wollte diesen auf einer kreisbahnlaufen lassen. allerdings hab ich das bisher erst für eine viertelkreis bewegung geschafft, wenn ich in die run() methode mehr code einfüge, etwa mit if abfragen bewegt sich keiner der kreise mehr. hier der code:
meine frage: wieso passiert da nix mehr ? abgeändert habe ich nur was in der run methode und die methode pos ist von mir, der rest ist eins zu eins aus dem tutorial
ich habe mir ein tutorial zur spieleentwicklung angeschaut, bei dem in einem applet ein kreis von links nach rechts bewegt wird.
jetzt hab ich mal ein bischen rumgespielt und einen 2 kreis hinzugefügt. ich wollte diesen auf einer kreisbahnlaufen lassen. allerdings hab ich das bisher erst für eine viertelkreis bewegung geschafft, wenn ich in die run() methode mehr code einfüge, etwa mit if abfragen bewegt sich keiner der kreise mehr. hier der code:
Code:
import java.applet.*;
import java.awt.*;
public class BallBewegungDoppel extends Applet implements Runnable
{
// Initialisierung der Variablen
int x_pos = 10; // x - Position des Balles
int y_pos = 100; // y - Position des Balles
int radius = 20; // Radius des Balles
int x2_pos = 10;
int y2_pos = 50;
int radius2 = 15;
int kreisR = 60;
// Variablen für die Doppelpufferung
private Image dbImage;
private Graphics dbg;
public void init()
{
setBackground (Color.blue);
}
public void start ()
{
// Schaffen eines neuen Threads, in dem das Spiel läuft
Thread th = new Thread (this);
// Starten des Threads
th.start ();
}
public void stop()
{
}
public void destroy()
{
}
public void run ()
{
// Erniedrigen der ThreadPriority um zeichnen zu erleichtern
Thread.currentThread().setPriority(Thread.MIN_PRIORITY);
boolean b = true;
// Solange true ist läuft der Thread weiter
while (true)
{
// Verändern der x- Koordinate
if (x2_pos == kreisR) b = !b;
//if (b) x2_pos++;
//if (b) x2_pos--;
y2_pos = pos(x2_pos);
// Neuzeichnen des Applets
repaint();
try
{
// Stoppen des Threads für in Klammern angegebene Millisekunden
Thread.sleep (20);
}
catch (InterruptedException ex)
{
// do nothing
}
// Zurücksetzen der ThreadPriority auf Maximalwert
Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
}
}
/** Update - Methode, Realisierung der Doppelpufferung zur Reduzierung des Bildschirmflackerns */
public void update (Graphics g)
{
// Initialisierung des DoubleBuffers
if (dbImage == null)
{
dbImage = createImage (this.getSize().width, this.getSize().height);
dbg = dbImage.getGraphics ();
}
// Bildschirm im Hintergrund löschen
dbg.setColor (getBackground ());
dbg.fillRect (0, 0, this.getSize().width, this.getSize().height);
// Auf gelöschten Hintergrund Vordergrund zeichnen
dbg.setColor (getForeground());
paint (dbg);
// Nun fertig gezeichnetes Bild Offscreen auf dem richtigen Bildschirm anzeigen
g.drawImage (dbImage, 0, 0, this);
}
public void paint (Graphics g)
{
g.setColor (Color.red);
g.fillOval (x_pos - radius, y_pos - radius, 2 * radius, 2 * radius);
g.setColor(Color.yellow);
g.fillOval (x2_pos - radius, y2_pos - radius2, 2 * radius2, 2 * radius2);
}
int pos(int x) {
return (int) Math.sqrt((kreisR*kreisR) - (x*x));
}
}
meine frage: wieso passiert da nix mehr ? abgeändert habe ich nur was in der run methode und die methode pos ist von mir, der rest ist eins zu eins aus dem tutorial