Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何防止pygame中的按钮垃圾邮件_Python_Time_Timer_Pygame_Spam - Fatal编程技术网

Python 如何防止pygame中的按钮垃圾邮件

Python 如何防止pygame中的按钮垃圾邮件,python,time,timer,pygame,spam,Python,Time,Timer,Pygame,Spam,基本上,目前,在我的游戏中,用户可以随心所欲地多次射击。。。这违背了游戏的目标(这让游戏变得太容易了),因为他们只能滥发子弹。我有一个“商店”类型的功能,使用户可以购买升级,因此垃圾邮件破坏了商店的目的 elif event.key == K_SPACE: newBullet = {'rect': pygame.Rect(bulletX, bulletY, 10, 3), 'surface': bullet} pis

基本上,目前,在我的游戏中,用户可以随心所欲地多次射击。。。这违背了游戏的目标(这让游戏变得太容易了),因为他们只能滥发子弹。我有一个“商店”类型的功能,使用户可以购买升级,因此垃圾邮件破坏了商店的目的

elif event.key == K_SPACE:
                    newBullet = {'rect': pygame.Rect(bulletX, bulletY, 10, 3), 'surface': bullet}
                    pistolSound.play()
                    bullets.append(newBullet)
这是代码,我可以添加什么,以防止按钮捣乱垃圾邮件。我对pygame时间函数不太熟悉,但我有一种可以使用的感觉

此外,我希望我的僵尸能够始终如一地产卵,而不是在非常随机的时刻

timer = clock.tick()
    if waveNumber <= 2:
                timer += 1
                if timer == 2:
                    newZombie = {'rect':pygame.Rect(zombieX, zombieY, 75, 75), 'surface': zombie}
                    zombieSound.play()
                    zombies.append(newZombie)
                    timer = 0 
timer=clock.tick()

如果波数将项目符号的数量限制在某个较小的数量:

elif event.key == K_SPACE:
    if len(bullets) < 3:
        newBullet = {'rect': pygame.Rect(bulletX, bulletY, 10, 3), 'surface': bullet}
        pistolSound.play()
        bullets.append(newBullet)
elif event.key==K_空格:
如果长度(项目符号)<3:
newBullet={'rect':pygame.rect(bulletX,bulletY,10,3),'surface':bullet}
手枪声
项目符号。附加(纽巴莱)

你应该将你的模拟和事件处理分成几个简短的“回合”,允许玩家每回合只射出一颗子弹(甚至更少)

最接近您的代码示例是,在处理适当类型的事件时,设置“按下放炮按钮此回合”标志,然后在处理所有事件后,最多放炮一次:

#each event
if event.key == K_SPACE:
    playerShooting=True 

僵尸也有类似的问题:无法预测clock.tick()的值。相反,每回合最多繁殖一次僵尸(可能按照计划,例如每五回合)。时钟应用于决定主循环是否应继续进行游戏状态更新,而不是等待进一步的输入,并决定何时渲染帧


参考,A和A PyGrand主循环。

请考虑为无关的查询打开单独的问题,谢谢,不要经常使用。如果你想每0.3秒发射一支枪,不管它们按多少(甚至按住按钮),你都可以使用一个冷却时间。谢谢你的编辑,JonShape。不知怎的,我想到的是java,而不是python。这就是同时使用多种语言编程时发生的情况:-(很好,我明白了你的意思,幸运的是我了解很多Java。这不是我想要的,但是,它确实实现了我想要的,并且我可以根据购买的升级操作值。谢谢。另一种可能是在生成项目符号时节省当前时间,然后拒绝生成更多的项目符号之后有一段时间。我该如何把僵尸的繁殖列入日程?
#each turn
if playerShooting:
    newBullet = {'rect': pygame.Rect(bulletX, bulletY, 10, 3), 'surface': bullet}            
    pistolSound.play()
    bullets.append(newBullet)
playerShooting=False#clear to prepare for next turn