Java-Gaming.org Hi !
 Featured games (90) games approved by the League of Dukes Games in Showcase (753) Games in Android Showcase (228) games submitted by our members Games in WIP (842) games currently in development
 News: Read the Java Gaming Resources, or peek at the official Java tutorials
Pages: [1]
 ignore  |  Print
 Asteroids: Shoot at a target question  (Read 1905 times) 0 Members and 1 Guest are viewing this topic.
Alex.Jeffery

Senior Newbie

 « Posted 2008-06-17 03:31:33 »

Hi,

I have been making a clone of Asteroids in Java. You can see my progress here Play Asteroids

I am having some trouble with getting the flying saucers to shoot at the player.
I have done some research and found that by taking the players position away from the flying saucers position and using the Math.atan2 function on the result I should get the rotation in radians needed to point towards the player from the flying saucers position.

Here is that in code.
 1  2  3  4  5  6  7  8  9  10 `double x1 = saucer.x.get();double y1 = -saucer.y.get();               double x2 = player.x.get();double y2 = -player.y.get();               double x = x2 - x1;double y = y2 - y1;               double angle = Math.atan2(y, x);`

I tried this and it did not work. So I did some test calculations to see why.
 Saucer Position Player Position Result (100, 100) (100, 90) 3.14 (100, 100) (110, 100) 1.57 (100, 100) (100, 110) 0 (100, 100) (90, 100) -1.57

This would rotate an object to point in the direction I wanted except the Y axis was upside down.
So if I multiplied the Y by -1 it comes out ok.

I then calculate the velocity for the bullet the saucer fires at the player as such
 1  2 `xVelocity += Math.sin(angle) * ACCELERATION;yVelocity -= Math.cos(angle) * ACCELERATION;`

I tried this in my game and the saucers do not shoot at the player.
Any tips on what to try next?

Thanks!

dishmoth
 « Reply #1 - Posted 2008-06-17 09:17:28 »

My first guess would be that you need to switch around the cos and sin in the velocity calculation, like so.  (That's usually the way things work with atan2.)
 1  2 `xVelocity += Math.cos(angle) * ACCELERATION;yVelocity -= Math.sin(angle) * ACCELERATION;`

However, that doesn't seem to agree with the "Result" angles that you've given in your example, so I'm not confident that it will solve the problem.

Also, you should be able to remove the minus signs from y1, y2 and yVelocity since they should all cancel out.

If you put a debugging line in the code to print out (x1,y1), (x2,y2), (x,y), angle, and (xVelocity,yVelocity), it should make it clearer what's going on.

For what it's worth, I believe that the following two bits of code should both make a bullet fly towards a target.
 1  2  3  4  5 `double dx = xTarget - xBullet;double dy = yTarget - yBullet;double angle = Math.atan2(dy,dx);double xVelBullet = speed*Math.cos(angle);double yVelBullet = speed*Math.sin(angle);`

 1  2  3  4  5  6 `double dx = xTarget - xBullet;double dy = yTarget - yBullet;double d = Math.sqrt(dx*dx + dy*dy);d = Math.max(d, 1.0e-6); // avoid dividing by zerodouble xVelBullet = speed*dx/d;double yVelBullet = speed*dy/d;`

gouessej
 « Reply #2 - Posted 2008-06-17 09:24:13 »

Hi!

Please don't forget to add your game on the Java Game Tome. I tested it. Please clarify what you mean by providing a schema with the data you know and what you want to compute from these data, then I will try to help you.

Julien Gouesse | Personal blog | Website | Jogamp
Alex.Jeffery

Senior Newbie

 « Reply #3 - Posted 2008-06-18 02:37:14 »

I tried the bullet maths you suggested and it works.
The little flying saucers are quite dangerous now

Thanks for the help!

I added my game to the Java Game Tome as well.

gouessej
 « Reply #4 - Posted 2008-06-18 10:56:02 »

I tried the bullet maths you suggested and it works.
The little flying saucers are quite dangerous now

Thanks for the help!

I added my game to the Java Game Tome as well.

Thanks. I will validate your addition as soon as possible. It is a pleasure for me to see more and more people adding their games and I will have to improve the website to drive the experience better.

Julien Gouesse | Personal blog | Website | Jogamp
Pages: [1]
 ignore  |  Print

 nelsongames (17 views) 2018-04-24 18:15:36 nelsongames (13 views) 2018-04-24 18:14:32 ivj94 (587 views) 2018-03-24 14:47:39 ivj94 (50 views) 2018-03-24 14:46:31 ivj94 (400 views) 2018-03-24 14:43:53 Solater (65 views) 2018-03-17 05:04:08 nelsongames (110 views) 2018-03-05 17:56:34 Gornova (175 views) 2018-03-02 22:15:33 buddyBro (730 views) 2018-02-28 16:59:18 buddyBro (93 views) 2018-02-28 16:45:17
 Java Gaming Resourcesby philfrei2017-12-05 19:38:37Java Gaming Resourcesby philfrei2017-12-05 19:37:39Java Gaming Resourcesby philfrei2017-12-05 19:36:10Java Gaming Resourcesby philfrei2017-12-05 19:33:10List of Learning Resourcesby elect2017-03-13 14:05:44List of Learning Resourcesby elect2017-03-13 14:04:45SF/X Librariesby philfrei2017-03-02 08:45:19SF/X Librariesby philfrei2017-03-02 08:44:05
 java-gaming.org is not responsible for the content posted by its members, including references to external websites, and other references that may or may not have a relation with our primarily gaming and game production oriented community. inquiries and complaints can be sent via email to the info‑account of the company managing the website of java‑gaming.org