pygame之飞机大战按键操作解决方案比较(3)

在pygame飞机大战游戏中,使用列表存储子弹数据后,发现按住射击键会导致子弹密集发射。通过对比尝试,拒绝了pygame.time.delay()全局暂停的方法,转而采用记录上一次发射时间的方式,在每次检测到射击事件时计算时间差,若超过预设间隔则发射子弹,实现了间隔控制。这种方法允许为不同类型的子弹设置不同发射间隔,如普通子弹快速,导弹慢速。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

都已经解决 同步“飞行” 和 “射击 ”的问题了,为什么还要写 (3)呢?

因为用了列表储存数据后,子弹的射击间隔无法控制了。按键 有 击键的时间差,可以让子弹看起来还算正常的发射,但是按住后,完全看的是 电脑 对按键的相应时间了,我的电脑产不多是 10 毫秒 左右一次。子弹看起来是一直线了。显然不合理。

用 pygame.time.delay()?  of course not 行,这个函数是暂停整个程序的运行,而不能只让子弹间隔加长。摸索了一些其他函数,都不行,还是换回笨办法 ,先设置一个函数 pretime 读取当前时间。运行时再次读取 currenttime 两个时间相减,如果大于你想要的interval  发射子弹,不然 略过。

测试代码如下:

import pygame
from sys import exit  #用到exit() 省的每次退出都有红字提示
 
class Keycontral(object):
 
    def __init__(self):
        pygame.init()
        scene = pygame.display.set_mode((400,600))
        pygame.display.set_caption('按键测试')
        #记录 a 键 按下的次数
        self.key_a_count = 0  
        #记录 j 键 按下的次数  
        self.key_j_count = 0
        # pygame.key.set_repeat(1,50)
        #子弹发射间隔
        self.interval = 200 #毫秒
        #得到当前时间
        self.pretime = pygame
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值