Jump to content
  • Advertisement
Sign in to follow this  
Ludovic

Moving my character...

This topic is 3797 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Greetings all, I am trying to build a game engine but I can't seem to work out how to move my character around the way I want. What I'm after is the character moving to where I have clicked my mouse so if the char is at 0, 0 (it's a 2D game btw) and I click on 10, 10 then the character moves to 10, 10 at a pre-determined speed, like 10. The trouble is that if I click on 200, 100 then it moves diagonally up until it comes to 100, 100 and then moves along until it hits 200, 100. This obviously isn’t any good. I realize that the off-diagonal means that it travels along faster than up but I can't seem to set my C++ code to do so and retain the 10 movement speed. I’ve tried moving it along at 10 and slowing down the up movement by finding how many up must occur to every along (i.e. 2 along to every 1 up) but my code just doesn’t seem to work. Anyone got any ideas by any chance? Cheers. /Ludo

Share this post


Link to post
Share on other sites
Advertisement
For 2D look up the Bresenham line algorithm. It should do what you want.

Share this post


Link to post
Share on other sites
Funny thing, i just worked out how to do it before I checked here.

if ( dbMouseClick ( ) == 1 )
{
if ( Once == 1 )
{
if ( dbObjectPositionX ( 2 ) < dbObjectPositionX ( 1 ) ) { One = dbObjectPositionX ( 1 ) - dbObjectPositionX ( 2 ) ; } // 100
if ( dbObjectPositionY ( 2 ) < dbObjectPositionY ( 1 ) ) { Two = dbObjectPositionY ( 1 ) - dbObjectPositionY ( 2 ) ; } // 50

Three = ( One / 10 ) ; // X Moves - 10
Four = ( Two / 10 ) ; // Y Moves - 5

if ( Three > Four ) { Five = Three / Four ; } // - 10 / 5 = 2
if ( Three < Four ) { Five = Four / Three ; } //

if ( Three > Four ) { Six = 10 / Five ; } else { Six = 10 ; } //
if ( Three < Four ) { Seven = 10 / Five ; } else { Seven = 10 ; } // 10

Once = 0 ;
}

if ( dbObjectPositionX ( 2 ) < dbObjectPositionX ( 1 ) ) { dbPositionObject ( 1, dbObjectPositionX ( 1 )-Seven, dbObjectPositionY ( 1 ), dbObjectPositionZ ( 1 ) ) ; }
//if ( dbObjectPositionX ( 2 ) > dbObjectPositionX ( 1 ) ) { dbPositionObject ( 1, dbObjectPositionX ( 1 )+10, dbObjectPositionY ( 1 ), dbObjectPositionZ ( 1 ) ) ; }

if ( dbObjectPositionY ( 2 ) < dbObjectPositionY ( 1 ) ) { dbPositionObject ( 1, dbObjectPositionX ( 1 ), dbObjectPositionY ( 1 )-Six, dbObjectPositionZ ( 1 ) ) ; }
//if ( dbObjectPositionY ( 2 ) > dbObjectPositionY ( 1 ) ) { dbPositionObject ( 1, dbObjectPositionX ( 1 ), dbObjectPositionY ( 1 )+10, dbObjectPositionZ ( 1 ) ) ; }
}

Thanks anyway. ^_^

Share this post


Link to post
Share on other sites
Or you simply use vectors

pseudo:

function MoveTo( X, Y )
vector2d direction = ( X - posX, Y - posY )
normalize( direction )

while not at destination
posX += direction.x * speed;
posY += direction.y * speed;



Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!