按键:重复延迟、重复速度、速度非线性增长。pygame实现

键盘的重复延迟是指你按下一个键,系统延迟一段时间后,才会再次响应这个键;
重复速度就是指不停的按这个键的时间间隔。

人类对这个世界的感知并非线性,而是更接近于某种对数时间。
所以,如果游戏玩家一直按着某个功能键,就让对应事件加速执行,可以提高玩家体验

以下程序主要实现两个功能:

  1. 事件响应延迟:游戏的刷新速度非常快,不能让事件在每一帧都执行一次,需要延迟一段时间后,才允许执行下一次
  2. 重复事件加速:如果在重复延迟的每一帧里玩家都在请求执行该事件,那就把下一次事件执行的速度加快,增长速度为指数级
''' timer control

Timer starts or stops a work at a particular time

usage:
1.不使用计时器
if key == True:
    do_something()
2.使用计时器 
timer = Timer(350,do_something)
if key == True:
    timer.do()

author@cse_wkm
'''

import pygame 

class Timer:
    def __init__(self, duration, func = None):
        self.duration = duration
        # self reinforcement
        self.logarithm = 1
        # event trigger times during self.active == True
        self._counter = 0
        self.func = func
        self.start_time = 0
        self.active = False

    def _activate(self):
        self.active = True
        self.start_time = pygame.time.get_ticks()

    def _deactivate(self):
        self.active = False
        self.start_time = 0
    
    def do(self):
        if self.active == False:
            self._activate
            self._counter = 0
        # 在Timer激活的时间段里(即active=True),触发一次do,counter加一
        self._counter += self.active

    def update(self):
        current_time = pygame.time.get_ticks()
        # 在Timer激活的时间段里(即active=True),每经过一帧,counter减一
        self._counter -= self.active
        if current_time - self.start_time >= self.duration >> self.logarithm:	# 事件加速,指数级增长
            if self.func and self.start_time != 0:
                self.func()
                if self._counter == 0:  # _counter为0,即每一帧都在触发do,比如按键一直按着不松
                	# 执行加速,这里没有设置速度上限
                    self.logarithm += 1  # 固定加速请直接修改self.duration
                else:
                    self.logarithm = 1  # 速度恢复
            self._deactivate()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值