Parashurama Skrevet 1. august 2012 Del Skrevet 1. august 2012 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
Hieronymus Skrevet 1. august 2012 Del Skrevet 1. august 2012 (endret) 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 1. august 2012 av Hieronymus Lenke til kommentar
Parashurama Skrevet 1. august 2012 Forfatter Del Skrevet 1. august 2012 Ahh, jeg skjønner. Tusen takk skal du ha! Nå virker det som det skal Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå