Pygame:怎么拍?

时间:2012-11-19 00:23:54

标签: button mouse pygame

这是代码片段:

fire_coord_x = 350.0
fire_coord_y = 350.0

while not done:

    fire_vel_x = 0.0
    fire_vel_y = 0.0
    fire_speed = 4.0

        if event.type == pygame.MOUSEBUTTONDOWN:
            if event.button == 1:
                screen.blit(fire1,[fire_coord_x,fire_coord_y])

正如你所看到的,当我按下鼠标按钮时,我已经使用条件“if”将fire1图像blit到屏幕上。问题是:大火消失了。我甚至试图这样做:

    if event.type == pygame.MOUSEBUTTONDOWN:
        if event.button == 1:
            screen.blit(fire1,[fire_coord_x,fire_coord_y])
    if event.type == pygame.MOUSEBUTTONUP:
        if event.button == 1:
            screen.blit(fire1,[fire_coord_x,fire_coord_y])

认为“MOUSEBUTTONUP”会永久保留图像。但是,它失败了。所以,我想问一些解决这个问题的技巧。如何按下鼠标按钮并以图像STAYS存在的方式创建图像?在武器方向上移动火图像是未来的问题。

出于记忆的原因,在某个时刻删除在偏移位置创建的每个图像会很有趣。

非常感谢!

2 个答案:

答案 0 :(得分:1)

MOUSEBUTTONDOWN事件

  1. 从名为项目符号
  2. 的空sprite.Group开始
  3. MOUSEBUTTONDOWN将子弹Sprite附加到子弹时。
  4. 在主绘制循环中,调用 bullets.draw()
  5.   

    出于记忆的原因,在某个时刻删除在偏移位置创建的每个图像会很有趣。

    实际上,内存中只有一个表面,所有项目符号(Sprite)都使用。如果100%的子弹死在哪里,那将是免费的。主要瓶颈可能是大量子弹碰撞。您可以使用QuadTree来改善这一点。

    QuadTree demo

    将鼠标按下状态

    如果您希望持有 LMB 来开机枪,就像FPS一样,那么您将

    1. 使用mouse.get_pressed()检查鼠标按下状态。
    2. 如果按下,自上次子弹> = 300ms后经过的时间,则生成子弹。 (否则忽略此循环。)

答案 1 :(得分:0)

background = 0,0,0

pressed = 0
fire1 = pygame.image.load("path/to/fire1")
fire_coord_x = 350
fire_coord_y = 350
while 1:
for event in pygame.event.get():
    if event.type == pygame.QUIT:
        sys.exit()
    if event.type == pygame.MOUSEBUTTONDOWN:
        pressed = 1
    if event.type == pygame.MOUSEBUTTONUP:
        pressed = 0

screen.fill(background) 
if pressed == 1:
    screen.blit(fire1,[fire_coord_x,fire_coord_y])

pygame.display.flip()

这看起来有用吗?这是你想做的吗?

每当您按下按钮时,这将创建一个fire1,如果您停止按下它将消失。