Pygame中每5秒创建Obstacle类实例报错:obstacle is not callable
解决Pygame中每5秒创建Obstacle实例的"obstacle is not callable"错误
错误原因
你当前的代码Timer(5, Obstacle(self,j,i)).start()会立即执行Obstacle(self,j,i)创建实例,然后把这个实例对象传给Timer的第二个参数。但Timer要求第二个参数是一个可调用对象(比如函数、lambda),而不是已经创建好的实例,这就导致了"obstacle is not callable"错误。
解决方案
方案1:用lambda包装实例化操作
使用lambda表达式把Obstacle的实例化逻辑包装成可调用对象,Timer触发时才会执行实例化:
Timer(5, lambda: Obstacle(self, j, i)).start()
方案2:定义专门的创建函数
如果逻辑更复杂,建议单独写一个函数来处理实例化,再把函数传给Timer:
def spawn_obstacle(): Obstacle(self, j, i) Timer(5, spawn_obstacle).start()
实现持续每隔5秒创建
如果需要重复每隔5秒创建(而不是只创建一次),需要在每次触发后重新启动Timer:
def spawn_obstacle(): Obstacle(self, j, i) # 重新启动Timer,实现循环触发 Timer(5, spawn_obstacle).start() # 首次启动Timer Timer(5, spawn_obstacle).start()
额外注意事项
- 确保你的
game类中已经正确初始化了Obstacle精灵组:# 在Game类的__init__中添加 self.Obstacle = py.sprite.Group() - 检查
tilesize、speed1、car_layer、green这些全局变量是否已经正确定义,避免实例化时出现其他错误。
内容的提问来源于stack exchange,提问作者qleqs
相关产品推荐
相关产品推荐

