Pygame mouse cursor load/unload

Alex Gardner agardner210 at gmail.com
Sat Mar 2 22:52:00 EST 2013


On Saturday, March 2, 2013 9:08:18 PM UTC-6, Ian wrote:
> On Sat, Mar 2, 2013 at 6:56 PM, Alex Gardner <agardner210 at gmail.com> wrote:
> 
> > I am in the process of making a pong game in python using the pygame library.  My current problem is that when I move the mouse, it turns off as soon as the mouse stops moving.  The way I am doing this is by making the default cursor invisible and using .png files as replacements for the cursor.  Perhaps my code would best explain my problem.  I will take help in any way that I can.  Here are the links that contain my code:
> 
> 
> 
> Your mouse motion code draws the paddle in the new position, waits
> 
> 1/10th of a second, and then draws over it again with the "invisible"
> 
> paddle.  Thus, approximately 1/10th of a second after you stop moving
> 
> the mouse, it disappears.
> 
> 
> 
> Mouse motion events are probably not the best way to do this.  You can
> 
> instead just capture the current position of the mouse on every frame
> 
> and use that instead.  I replaced your main loop with the following:
> 
> 
> 
> paddle_pos = (0, 0)
> 
> clock = pygame.time.Clock()
> 
> 
> 
> while True:
> 
>     for event in pygame.event.get():
> 
>         if event.type == QUIT:
> 
>             sys.exit()
> 
> 
> 
>     # Erase the paddle from the old mouse position.
> 
>     screen.blit(bpaddle, paddle_pos)
> 
>     # Redraw the net before the paddle so that the paddle can appear over it.
> 
>     pygame.draw.line(screen, game.lineColor, game.net1, game.net2,
> 
>                      game.netWidth)
> 
>     # Get the new mouse position.
> 
>     paddle_pos = pygame.mouse.get_pos()
> 
>     # Draw the paddle at the new mouse position.
> 
>     screen.blit(beeper, paddle_pos)
> 
>     # Update the screen if it's double-buffered.
> 
>     pygame.display.update()
> 
>     # Finally, let the CPU idle until it's time for the next frame.
> 
>     # 50 here means that it will sleep long enough to achieve 50 FPS.
> 
>     clock.tick(50)
> 
> 
> 
> And I think you will find that this does what you want.
> 
> 
> 
> A couple more observations while I'm at it.  Generally there is no
> 
> need to be calling pygame.display.update() multiple times per frame.
> 
> Just draw everything that you need, and then call it once at the end
> 
> of the loop, as I have shown above.  Also, the shebang line only does
> 
> anything if it's the very first line in the file, so it would need to
> 
> appear before the module docstring to do anything useful.

Thank you very much, Ian.  I understand the code and have learned from it.  If I were more knowledgeable in python I wouldn't have had to ask; I am learning as I go with this project.  Again, thank you :)



More information about the Python-list mailing list