Java-Gaming.org    
Featured games (79)
games approved by the League of Dukes
Games in Showcase (477)
Games in Android Showcase (109)
games submitted by our members
Games in WIP (536)
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  
  Character in center of screen turns toward mouse  (Read 1095 times)
0 Members and 1 Guest are viewing this topic.
Offline xt.xylophone

Junior Newbie





« Posted 2012-08-07 00:58:05 »

Hi everyone,

In my current game I intend for the player controlled character to turn to face the mouse and keyboard keys move them. My first implementation was to have them face it at all times which was no problem.

Next I wanted to have it turn at a specified rate toward the mouse.
This came up with some new issues. When the mouse crossed over the 180' to -180' range it would start turning the other way.
I did end up solving this though
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
        double delta_x = mouse.x - position.x;
        double delta_y = mouse.y - position.y;
        double angle = Math.toDegrees(Math.atan2(delta_y, delta_x));
       
        double difference = angle - direction;
        while (difference < -180) difference += 360;
        while (difference > 180) difference -= 360;  
       
        if(difference < 0)
           direction -= turnRate;
        else
           direction += turnRate;

        if(mouseLast.equals(mouse)) {
           if(Math.abs(difference) < turnRate) {
              direction = angle;
           }
        }

This took me a while to find so if anyone else had this issue I hope this helps but my question is to do with the last if statement. Without it, the character would jump around back and forward because its pretty much impossible to 'land' on the angle to face with a specified turn rate.
First I just had the 'if angle difference is less than turn rate, set it to the angle' This was ok and got rid of any jagged movement but on a character with a low turn rate, you could move the mouse slowly and it would keep snapping to that angle and you could turn it WAYYY faster than it could on its own.
Now with the current mouse check against the last to see if its moving it wont 'cheat' but now for fast turning characters on slow mouse movements it will jump back and foward around the target point.

So is this a problem that can be fixed or will it always be a trade off between the two. Or is there any other trigonometric techniques that will help?
Offline jonjava
« Reply #1 - Posted 2012-08-07 10:12:07 »

Hmm, have you tried:

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
        double delta_x = mouse.x - position.x;
        double delta_y = mouse.y - position.y;
        double angle = Math.toDegrees(Math.atan2(delta_y, delta_x));
       
        double difference = angle - direction;
        while (difference < -180) difference += 360;
        while (difference > 180) difference -= 360;  
       
        if(difference < 0) {
           double t = Math.min(turnRate, -difference)
           direction -= t;
        }
        else {
           double t = Math.min(turnRate, difference)
           direction += t;
        }

        if(mouseLast.equals(mouse)) {
           if(Math.abs(difference) < turnRate) {
              direction = angle;


I.e, limiting the amount the character will turn so that he doesn't go beyond the mouse direction.

Offline xt.xylophone

Junior Newbie





« Reply #2 - Posted 2012-08-08 00:12:21 »

Hi Jonjava

Just after I finished writing it I kind of thought of that as an option but your implementation was much better and seems to work perfectly Smiley

Thanks very much!
Pages: [1]
  ignore  |  Print  
 
 
You cannot reply to this message, because it is very, very old.

 

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

The first screenshot will be displayed as a thumbnail.

CogWheelz (18 views)
2014-07-30 21:08:39

Riven (25 views)
2014-07-29 18:09:19

Riven (15 views)
2014-07-29 18:08:52

Dwinin (13 views)
2014-07-29 10:59:34

E.R. Fleming (33 views)
2014-07-29 03:07:13

E.R. Fleming (12 views)
2014-07-29 03:06:25

pw (43 views)
2014-07-24 01:59:36

Riven (44 views)
2014-07-23 21:16:32

Riven (30 views)
2014-07-23 21:07:15

Riven (31 views)
2014-07-23 20:56:16
List of Learning Resources
by SilverTiger
2014-07-31 18:29:50

List of Learning Resources
by SilverTiger
2014-07-31 18:26:06

List of Learning Resources
by SilverTiger
2014-07-31 13:54:12

HotSpot Options
by dleskov
2014-07-08 03:59:08

Java and Game Development Tutorials
by SwordsMiner
2014-06-14 00:58:24

Java and Game Development Tutorials
by SwordsMiner
2014-06-14 00:47:22

How do I start Java Game Development?
by ra4king
2014-05-17 11:13:37

HotSpot Options
by Roquen
2014-05-15 09:59:54
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
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!