Jump to content
  • Advertisement
Sign in to follow this  

Pygame - 2D world rotation?

This topic is 2220 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

Hi, I'm creating a 2D platformer game using Pygame. I [sort of] know how to move the world around the player as if the screen was following him. What I need to do now is rotate the entire world around him. I've done this in Game Maker using view_angle, but I'm not exactly sure how to do this using Pygame.
I have one idea for solving this: I was thinking of rotating the image of all the game objects and moving their position using circular motion where the radius of the circle is the distance from the player. If this sounds good, then how would I go about doing circular motion?

Thanks in advance for any helpful replies.

Share this post

Link to post
Share on other sites
I will discuss only rotation around the origin. If you need to rotate around some other center, subtract the center first, apply the rotation around the origin and then add the center back.

import math

def rotate(x,y,alpha): # Rotate (x,y) around the origin by an angle alpha (in radians!)
x,y = math.cos(alpha)*x - math.sin(alpha)*y, math.sin(alpha)*x + math.cos(alpha)*y
return (x,y)

I don't use Python, but that seems to work. I am sorry if this code is not idiomatic.

Alternatively, if you are familiar with complex numbers (which in Python are implemented in cmath), you can use them to represent coordinates in 2D (point (x,y) becomes x+y*1j). Instead of thinking of the rotation as an angle alpha, think of it as the complex number z=exp(alpha*1j), which can also be expressed as z=cos(alpha)+sin(alpha)*1j. The rotation is now just multiplication by z.

import cmath

def complex_rotate(z,alpha):
return z * cmath.exp(alpha*1j)

# Example:
# print complex_rotate(complex(2,3),1.57079632679489661922)

(NOTE: "1j" seems to be how one refers to sqrt(-1) in Python) Edited by alvaro

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!