Hej... Jeg sidder med bakser rundt med Graphics2D og skal have lavet en flok robotter der bevæger sig rundt på skærmen. Robot klassen indholder infor om robottens position og retning. Jeg ville så gerne have at klasen kunne "tegnes" direkte på et Graphics2d. Så jeg har prøvet at implementere paint() (så den placere robotten korrekt og drejer denne med transform) men jeg kan ikke helt få det til at virke. Robotternes position ændre sig hele tiden så det skulle gerne virke sådan at en timer sørger for gentagene kald til repaint så det hele blev animeret.. Nogen der kan smide lidt kode op ?
Her er hvad jeg har so far... SimulatorView.java (JFramen til til applikationen) import javax.swing.*; import java.awt.event.*;
public class SimulatorView extends JFrame {
public SimulatorView( String title ) { super( title ); System.out.println("SimulatorView: Stating GUI");
//Add canvas WorldView vw = new WorldView(); getContentPane().add(vw);
addWindowListener( new ApplicationTerminator() ); Timer t = new Timer(200,vw); t.start(); setSize( 500, 500 ); setVisible( true ); } }
class ApplicationTerminator extends WindowAdapter { public void windowClosing( WindowEvent e ) { System.out.println("Normal System exit(Main window close)"); System.exit(0); } }
WorldView.java (Et JPanel til Graphic2D kanvaset) mport javax.swing.*; import java.awt.*; import java.awt.event.*;
public class WorldView extends JPanel implements ActionListener{
int robox = 20; int roboy=20; RobotIcon robo = new RobotIcon(200,200,33);
public void paintComponent(Graphics g) { super.paintComponent(g);
} public void actionPerformed(ActionEvent event) { robo.offsetPosition(10,10); //Flyt lidt på robotten repaint();
}
RobotIcon.java (Indkapsling af rendering innformationen til robboterne)
import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Point; import java.awt.geom.Area; import java.awt.geom.Ellipse2D; import java.awt.geom.Rectangle2D; public class RobotIcon extends Area {
Point location, centre; double direction;
public RobotIcon(int x, int y, int direction) { this.direction = Math.toRadians(direction); location = new Point(x,y); centre = new Point(x+4,y+4); Ellipse2D.Double body = new Ellipse2D.Double(location.x, location.y, 8, 8); Rectangle2D.Double heading = new Rectangle2D.Double(centre.x, centre.y, 10,2); Area bodyArea = new Area(body); Area headingArea = new Area(heading);
add(bodyArea); add(headingArea); } // end primary constructor
public void paint(Graphics g) { Graphics2D g2 = (Graphics2D) g.create();
} public void actionPerformed(ActionEvent event) { robo.offsetPosition(1,1); repaint();
}
} public class RobotIcon extends Area {
Point location, centre; double direction;
public RobotIcon(int x, int y, int direction) { this.direction = Math.toRadians(direction); location = new Point(x,y); centre = new Point(x+4,y+4); Ellipse2D.Double body = new Ellipse2D.Double(location.x, location.y, 8, 8); Rectangle2D.Double heading = new Rectangle2D.Double(centre.x, centre.y, 2,10); Area bodyArea = new Area(body); Area headingArea = new Area(heading);
add(bodyArea); add(headingArea); } // end primary constructor
public void offsetPosition(int x, int y) { location.translate(x,y); centre.translate(x,y); }
}
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.