Java-Gaming.org
Play Revenge of the Titans! The situation is critical. We need fancy commanders to defend Earth, the moon, Mars!
Featured games (78)
games approved by the League of Dukes
Games in Showcase (406)
games submitted by our members
Games in WIP (290)
games currently in development
News: Read the Java Gaming Resources, or peek at the official Java tutorials
 
    Home     Help   Search   Login   Register   
Pages: [1]
  ignore  |  Print  
  Problem: movement of Asteroids clone Ship  (Read 1001 times)
0 Members and 1 Guest are viewing this topic.
Offline Hendrick

Junior Newbie





« Posted 2007-05-27 13:41:01 »

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);

      // Cast Graphics to Graphics2D
      Graphics2D g2d = (Graphics2D)g;

      [b]//Moves ship[/b]
     g2d.translate(shipVelocity.x, shipVelocity.y);

      [b]//Rotates ship[/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  
//Ship class:

public void [b]move[/b](double dx, double dy) {
x += dx;
y += dy;

// updates the already constructed polygons

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
Offline ravenger

Senior Newbie





« Reply #1 - Posted 2007-05-30 15:49:29 »

I suppose you're on the good way, but you need to know a thing or 2 about a game's technical architechture. The way you're approaching how to make a game is a common beginners mistake so to speak, i started exactly the same way Wink First, just don't make it difficult for yourself by using threads, and second, you dont want to use Timer stuff.

The point with using repaint(), is that its not an order to java to repaint, but actually a request, which java will answer to when the jvm has the time to comply. Therefor you will have to take these matters into your own hand. Where you want to go, is to a general so called main loop where you check and process your input, and render your graphics every pass, which is normally called a frame. A basic mainloop looks a bit like this;
1  
2  
3  
4  
5  
6  
7  
public void mainLoop() {
    while(running) {
         handleInput();
         doMovement();
         drawFrame();
    }
}


You would also go for accelerated graphics. This allows to prepare the next batch of graphics while the current is being displayed basicly, and it wil help on creating more fluency in movement.

What youd best go from here, is prolly to read Kevin Glass his Space Invaders Tutorial, where every aspect is explained a bit better Wink You could also read the book "Killer Game Programming In Java".
Pages: [1]
  ignore  |  Print  
 
 
You cannot reply to this message, because it is very, very old.

Play Revenge of the Titans! The situation is critical. We need fancy commanders to defend Earth, the moon, Mars!
 
Browse for soundtracks for your game!

Add your game by posting it in the WIP section,
or publish it in Showcase.

The first screenshot will be displayed as a thumbnail.

The invasion has landed! On Mars! And you're there to beat 'em!
cubemaster21 (62 views)
2013-05-17 21:29:12

alaslipknot (71 views)
2013-05-16 21:24:48

gouessej (102 views)
2013-05-16 00:53:38

gouessej (99 views)
2013-05-16 00:17:58

theagentd (108 views)
2013-05-15 15:01:13

theagentd (98 views)
2013-05-15 15:00:54

StreetDoggy (144 views)
2013-05-14 15:56:26

kutucuk (167 views)
2013-05-12 17:10:36

kutucuk (166 views)
2013-05-12 15:36:09

UnluckyDevil (175 views)
2013-05-12 05:09:57
Complex number cookbook
by Roquen
2013-04-24 12:47:31

2D Dynamic Lighting
by Oskuro
2013-04-17 16:46:12

2D Dynamic Lighting
by Oskuro
2013-04-17 16:45:57

2D Dynamic Lighting
by Oskuro
2013-04-17 16:23:20

Noise (bandpassed white)
by Roquen
2013-04-05 17:36:01

Noise (bandpassed white)
by Roquen
2013-04-03 16:17:38

Java Data structures
by Roquen
2013-03-29 13:21:12

Topic Request
by kutucuk
2013-03-22 21:42:01
Powered by MySQL Powered by PHP Powered by SMF 1.1.18 | SMF © 2013, Simple Machines | Managed by Enhanced Four Valid XHTML 1.0! Valid CSS!
Page created in 0.191 seconds with 20 queries.