Hi,
I'm in the process of making a 2D Asteroids clone.
I've managed to rotate and translate (move with the correct orientation) the ship with:
1 2 3 4 5 6 7 8 9 10 11 12
| public void paintComponent(Graphics g){ super.paintComponent(g); setBackground(Color.black);
Graphics2D g2d = (Graphics2D)g;
[b] g2d.translate(shipVelocity.x, shipVelocity.y);
[b] g2d.rotate(rotate.getTheta(), ship.getX(), ship.getY()); |
My problem is that I want the ship to continue moving (translating) without further input from the up arrow. I need to do it with the
1
| public void actionPerformed(ActionEvent e) |
method and a Timer object. Would anyone know how to do this? I also tried placing AffineTransform() methods into the public void actionPerformed(ActionEvent e) method but I don't think that it was the right approach.
I've come close to achieving the movement of the ship with updating the polygons of the ship:
1 2 3 4 5 6 7 8 9 10 11 12 13
| public void actionPerformed(ActionEvent e) { if (up && t.isRunning()) { [b] ship.move(shipVelocity.x, shipVelocity.y);[/b] } repaint(); } public void keyPressed(KeyEvent e) { t.start(); if (e.getKeyCode() == KeyEvent.VK_UP) { [b]shipVelocity.x += SHIP_THRUST_SPEED * Math.cos(rotate.getTheta()); shipVelocity.y += SHIP_THRUST_SPEED * Math.sin(rotate.getTheta());[/b] } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| public void [b]move[/b](double dx, double dy) { x += dx; y += dy;
hull = new Polygon(); hull.addPoint( 0+x, 15+y ); hull.addPoint( -10+x, -15+y ); hull.addPoint( -5+x, -10+y ); hull.addPoint( 5+x, -10+y ); hull.addPoint( 10+x, -15+y ); hull.addPoint( 0+x, 15+y );
cockpit = new Polygon(); cockpit.addPoint( 0+x, 6+y ); cockpit.addPoint( -4+x, -6+y ); cockpit.addPoint( 0+x, -8+y ); cockpit.addPoint ( 4+x, -6+y );
thrust = new Polygon(); thrust.addPoint( -5+x, -10+y ); thrust.addPoint( -0+x, -20+y ); thrust.addPoint( 5+x, -10+y );
|
The only thing is the movement is warped and doesn't move like the g2d.translate(shipVelocity.x, shipVelocity.y); method.
Also, any ideas on that effect in Asteroids where when you move the ship to the side of one screen boundary it gets translated to the opposite end of the screen?
Kind regards,
Hendrick