Gå til innhold

[Løst] Objekter beveger seg ikke uavhenging av hverandre..


Anbefalte innlegg

Hei. Har laget et program hvor jeg skal ha to bugs gående rundt på skjermen.

Lager jeg kun ett objekt av min Bug class går det greit. Problemet er når jeg har to objekter. Da blir bug2 sin posisjon avhengig av bug 1 sin vinkel og posisjon. Hvorfor skjer dette? Jeg tror kanskje det har noe med java2D translate funksjonen men finner ikke ut av det. her er coden min:

 

Class World som er "verdenen" bugsa beveger seg i:

 

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Toolkit;
import javax.swing.JPanel;
public class World extends JPanel implements Runnable {

Thread t = new Thread(this);
private Bug b;
private Bug b1;

//Constructor
public World(){
 t.start();
 b= new Bug(300,300);
 b1 = new Bug(50 ,50);
}

public void paint(Graphics g){
 // draw background
 g.setColor(Color.GREEN);
 g.fillRect(0, 0, 1200, 600);
 //update bug
 b.update(g);
 b1.update(g);
}

public void run(){
 while(true){
  try{
t.sleep(30);
repaint();
  }catch(Exception e){}
 }
}
}

 

Og her er Bug classen:

 

import java.awt.*;
import javax.swing.*;
public class Bug extends JPanel implements Runnable{
// vars
private float posX;
private float posY;
private float ang = 5.0f;
private float speed = 0.5f;
private boolean running = true;
Image img1 = Toolkit.getDefaultToolkit().getImage("E:\\java\\The New Eden\\Images\\Bugs\\bug.png");
Thread tbug = new Thread(this);

//Constructor
public Bug(int px, int py){
 tbug.start();
 posX = px;
 posY = py;
}

// drawing the Bug
public void update(Graphics g){
 Graphics2D g2d=(Graphics2D)g; // Create a Java2D version of g.
 g2d.translate(posX, posY); // Translate the center of our coordinates.
	g2d.rotate(ang);  // Rotate the image
	g2d.drawImage(img1, -24,-24, img1.getWidth(null),img1.getHeight(null), this);
	g2d.translate(-posX, -posY); // Translate the center of our coordinates back to original	  
}

//moving about
public void move(float x,float y, float a){
 float ran;
 float ran1;
 ran = (float) Math.random();
 ran1 = (float)Math.random()/6;
 if(ran < 0.05){
  ang += ran1;
 }
 if(ran > 0.95){
  ang -= ran1;
 }

 posX += speed*Math.cos(a);
 posY += speed*Math.sin(a);
}

public void run(){
 while(running){
  try{
move(posX,posY,ang);
repaint();
tbug.sleep(30);  
  }catch(Exception e){}
 }
}

}

 

Håper noen kan gi meg noen pointere om hvorfor b1 sin posX og posY blir påvirket av b.

Lenke til kommentar
Videoannonse
Annonse

Ifølge JavaDoc for Graphics2D.translate():

 

"Concatenates the current Graphics2D Transform with a translation transform. Subsequent rendering is translated by the specified distance relative to the previous position."

 

Det vil si at det du gjør for bug 1, vil påvirke bug 2, og det du gjør for bug 2 vil påvirke bug 1, osv.

 

Du må, før du translater og rotater, ta vare på gjeldende "state":

 

AffineTransform aT = g2d.getTransform();

...do your stuff...

g2d.setTransform(aT);

Endret av Hieronymus
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...