我寻找答案,但没有人适合我的问题......
我试图创建一个Timer,它应该每n个时钟调用一个给定的函数,但它不起作用,当我调试我的对象时,应该存储调用函数的属性callback_function
就会消失。
以下是代码:
import pygame
class Timer:
def __init__(self, time, callback_function, repeat=False, how_many=0,
infinite=False, *args, **kwargs):
self.now = pygame.time.get_ticks()
self.time = time
self.callback_function = callback_function
self.repeat = repeat
self.how_many = how_many
self.infinite = infinite
self.args = args
self.kwargs = kwargs
self.active = True
def update(self):
if pygame.time.get_ticks() - self.now >= self.time and self.active:
self.callback_function(self.args, self.kwargs)
if((self.how_many == 0 and not self.infinite) or
self.repeat == False):
self.active = False
return False
elif not self.infinite:
self.how_many -= 1
self.now = pygame.time.get_ticks()
return True
更多代码:
import pygame
from api.ActorSprite import ActorSprite
from api.Timer import Timer
class ActorTest(ActorSprite):
def __init__(self):
super().__init__(pygame.image.load("assets/mario.jpg").convert())
self.add_timer(timer = Timer(2000, self.print_test,repeat=True,how_many=2))
def draw(self, screen):
super().draw(screen)
self.update_timers()
def print_test(self, *args, **kwargs):
print("Hello World!")
没有错误消息,函数print_test
没有被调用。但是当我不使用超级ActorTest
来管理Timer
时,它就可以了...我不明白!
这些是我调试器的截图:
答案 0 :(得分:2)
我不确定这是否真的是你问题的原因,而不是这个:
self.callback_function = lambda *args, **kwargs: callback_function(args, kwargs)
你应该写一下
self.callback_function = callback_function
答案 1 :(得分:0)
好的我很抱歉这只是我调试器的一个错误,问题不在那里。现在效果很好,谢谢!