我在我正在制作的pygame应用程序中遇到了一些麻烦。菜单中有一些按钮可以更改模拟运行的速度(通过更改speed
中的clock.tick(speed*10)
)。但是,这也会降低菜单按钮响应的速度。如果我将speed
设置为低于0.5,则速度和播放/暂停按钮最多需要五秒钟才能注册一次点击。所以我尝试创建自己的方法来解决这个问题:
speed = 1 # defined previously ingame
timeSlow = 0
timeSlowGoal = 0
while True: # game loop
if speed < 1:
timeSlowGoal = reciprocal(speed) # well here's my problem
else:
timeSlowGoal = -1
if timeSlowGoal != -1:
if timeSlow >= timeSlowGoal:
timeSlow = 0
# more code that actually does stuff
else:
timeSlow += 1
# doesn't match, try again
在python中,有一些技巧,如int()
,string()
和float()
来更改变量。当然,reciprocal()
不起作用。是否有类似这样的函数得到一个数的倒数(在这种情况下总是一个小数)或者我是否需要做一些花哨的数学来得到它?
(当然,如果所有这些都是不必要的,并且你有一个更好的解决方案来解决我的第一个问题,请告诉我)
编辑:好的,我忽略了一个非常简单的解决方案。 1 / n 总是 n的倒数。不需要一个reciprocal()函数,因为它很简单。这就是我忘记小学数学的原因。
答案 0 :(得分:2)
假设您使用的是Python 3,请更改
timeSlowGoal = reciprocal(speed)
到
timeSlowGoal = 1 / speed
如果速度为零,请确保不要尝试这样做。
答案 1 :(得分:1)
我不知道为什么你有这么大的代码,因为Reciprocal of a number可以简单地提到:1/n
因此,您的reciprocal
函数可以简单地写为:
def reciprocal(n):
return 1.0 / n
在这里,我使用1.0/n
代替1/n
,因为在python中,除法的结果是分数, numerator 或分母应该有分数值。
示例运行:
>>> reciprocal(3)
0.3333333333333333
>>> reciprocal(0.3333333)
3.00000030000003 # Not '3' because of the loss in the precision of value entered
>>> reciprocal(reciprocal(3))
3.0 # Doing reciprocal twice returns "3"