0

这是一段代码:

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 图像传送到屏幕上。问题是:火消失了。我什至尝试过这样做:

    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”将图像永远保留在那里。但是,失败得很惨。所以,我想请教一些技术来解决这个问题。如何按鼠标按钮并创建图像,以使图像留在那里?将火图像朝武器方向移动是未来的问题。

出于记忆的原因,在某个时间点对在偏移位置创建的每个图像进行 drestroy 处理会很有趣。

非常感谢!

4

2 回答 2

1

MOUSEBUTTONDOWN 事件

  1. 从一个空的sprite.Group命名项目符号开始
  2. MOUSEBUTTONDOWN项目符号附加Sprite到项目符号时。
  3. 在你的主绘图循环中,调用bullets.draw()

出于记忆的原因,在某个时间点对在偏移位置创建的每个图像进行 drestroy 处理会很有趣。

实际上,内存中只有一个表面,所有子弹(Sprite)都使用它。只有当 100% 的子弹死在哪里时,它才会被释放。主要瓶颈可能是大量子弹的碰撞。您可以使用 QuadTree 改进这一点。

四叉树演示

鼠标按下状态

如果你想像 FPS 那样拿着LMB来开枪,那么你会

  1. 使用mouse.get_pressed()检查鼠标按下状态。
  2. 如果按下,并且自上一个项目符号 >= 300 毫秒以来经过的时间,则生成项目符号。(否则忽略此循环。)
于 2012-11-19T04:31:53.663 回答
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,如果您停止按下,它将消失。

于 2012-11-19T00:58:34.140 回答