This is really smart indeed, thanks for this, of course it was helpful :-)

Hm... i'll use this thread for asking a new question, always concerning my car game.

Now, i would like to handle collisions. I already wrote something for detect when car go out the road using mask. Now i would like to detect when the car hit an 'obstacle'. My first idea was to use another mask : so at the moment, i do this way :

calculates the position of two front points of the car (front left and front right) considering the rotation

use those points and the mask to check if the car hit an obstacle

Once again, this is my way to do. Might be not the best, so if someone have another idea.

On Mon, Sep 5, 2011 at 5:54 PM, Nathan BIAGINI <nathan.open@xxxxxxxxx> wrote:
> Hi again,
>
> i have a new problem to solve concerning my little car game. Actually i
> thought i did it but i just stopped a bug in my code.
>
> In fact, i decided to not move the car but to scroll the screen. I only move
> the car when the player reach one of the four edges of the map. I keep the
> 'virtual' position of the car on the circuit and i use them to determinate
> how i need to stop scrolling the screen and start moving the car.

[...]

Hi Nathan,

I ran your demo and I have two suggestions:

1. You calculate a new rectangle for your car at the top of the update
method based on self.image from *last* frame. Then you calculate a new
self.image based on the current rotation. When I moved the rectangle
calculation down to be the last thing in update(), the turning was
*much* smoother.

2. When doing scrolling like this, I would normally give the player
object only what you call "virtual_x" and "virtual_y" - the position
of the player relative to the map. These would be the only things
updated in the update() method - I wouldn't track x, y, offset_x or
offset_y at all. I create a separate class that I call "Camera" or
"Viewport" with its own x and y, then at the point that I'm drawing
things I subtract the camera's x and y from the player's x and y to
find the screen coordinates to draw the player.