Take the 2-minute tour ×
Game Development Stack Exchange is a question and answer site for professional and independent game developers. It's 100% free, no registration required.

I am using PGELua for the PlaystationPortable. I would just like to know how to make a 2D sprite move in the direction that the sprite is facing.

When the sprite is blitted to the screen it should be heading down the y axis (like it's moving up the screen) but it doesn't appear to be working that way. As far as I am aware, the angles of the images use radians for the rotations.

I have this in a function

function FUNC_MOVE_SHIP(speed,angles)
    VAR_SHIPX = VAR_SHIPX + pge.math.sin(angles) * speed
    VAR_SHIPY = VAR_SHIPY + pge.math.cos(angles) * speed
end

and I call it in my main program like

    FUNC_ST_DR()
    if pge.controls.held(PGE_CTRL_LEFT) then
        VAR_SHIP_ANGLE=VAR_SHIP_ANGLE-0.01
    elseif pge.controls.held(PGE_CTRL_RIGHT) then
        VAR_SHIP_ANGLE=VAR_SHIP_ANGLE+0.01
    end
    FUNC_MOVE_SHIP(VAR_SHIP_SPEED,pge.math.rad(VAR_SHIP_ANGLE))
    SHIP_11:activate()
    SHIP_11:draweasy(VAR_SHIPX,VAR_SHIPY,pge.math.rad(VAR_SHIP_ANGLE))
    FUNC_EN_DR()
share|improve this question
2  
How DOES it appear to be working? –  eBusiness Jan 9 '12 at 23:11

2 Answers 2

up vote 2 down vote accepted

A common problem with using radians is that they start to the right. Look at this picture (from Wikipedia):

radians/degrees

As you can see, it starts at 0 on the right of the circle and goes counter-clockwise around the circle until it hits 2 * PI. So if your sprite isn't pointing to the right with a rotation of 0, you might have to add some constant. Eg. if your sprite is pointing up, you have to add PI * 0.5 to the calculated angle. Also, instead of adding and subtracting 0.01 from the angle, I'd rather choose some fraction of PI instead. Eg. PI / 90 equals 2 degrees of rotation per update.

share|improve this answer
    
This is brilliant, thanks! –  Richard Sparrow Jan 10 '12 at 11:35

I believe that your movement formula should only work if the angles value is in degrees. To convert radians to degree simply multiply the radian value by 180 and divide it by pi.

share|improve this answer
    
This is very helpful, I never understood (looking at other code) why there was a lot of 180/pge.math.pi() –  Richard Sparrow Jan 10 '12 at 11:36

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.