如何防止pygame中的按钮垃圾邮件
Posted
技术标签:
【中文标题】如何防止pygame中的按钮垃圾邮件【英文标题】:how to prevent button spamming in pygame 【发布时间】:2013-12-10 11:43:22 【问题描述】:目前,基本上,在我的游戏中,用户可以根据需要进行多次射击......这违背了游戏的目标(它太容易了),因为他们只能发送垃圾子弹。我有一个“商店”类型的功能,使用户能够购买升级,因此垃圾邮件破坏了商店的目的。
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
我该怎么做呢?我想我用错了时间函数。
非常感谢,威尔。
【问题讨论】:
请考虑为不相关的查询打开单独的问题 好的,谢谢,不要经常用这个。 如果你想让枪每 0.3 秒开火一次,无论他们按下多少(甚至按住按钮)你都可以使用冷却时间。 ***.com/a/18856389/341744 【参考方案1】:将子弹的数量限制在某个小数字:
elif event.key == K_SPACE:
if len(bullets) < 3:
newBullet = 'rect': pygame.Rect(bulletX, bulletY, 10, 3), 'surface': bullet
pistolSound.play()
bullets.append(newBullet)
【讨论】:
感谢您的编辑,jonrshape。不知何故,我在想java,而不是python。这就是同时用多种语言编程时会发生的情况:-( 没关系,我明白你的意思了,幸好我懂一点Java。这不是我想要的,但是,它确实实现了我想要的,我可以根据购买的升级来操纵价值。谢谢。 另一种可能性是在生成子弹时保存当前时间,然后在一段时间内拒绝生成更多子弹。【参考方案2】:您应该将模拟和事件处理分解为简短的“回合”,并允许玩家每回合只发射一颗子弹(甚至更少)。
最接近您的代码示例的方法是在处理适当类型的事件时设置“本回合按下拍摄按钮”标志,然后在处理完所有事件后最多拍摄一次:
#each event
if event.key == K_SPACE:
playerShooting=True
...
#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
僵尸也有类似的问题:你无法预测clock.tick() 的值。相反,每回合最多生成一次僵尸(可能按计划进行,例如每五回合)。时钟应该用于决定主循环是否应该继续游戏状态更新而不是等待进一步的输入,并决定何时渲染帧。
作为参考,PyGame 主循环的 bad example 和 good but incomplete example。
【讨论】:
如何安排僵尸的产卵时间?以上是关于如何防止pygame中的按钮垃圾邮件的主要内容,如果未能解决你的问题,请参考以下文章
jQuery ajax:如何防止 chrome DevTools 中的 404 错误垃圾邮件? [复制]