1 回答

TA贡献1817条经验 获得超14个赞
您可以通过修改类来完成前两个问题PSWidget。通过向类添加两个属性enemy_count和:killall
class PSWidget(Widget):
indices = []
vertices = []
particles = []
enemy_count = 0
killall = False
并在方法中使用这些属性update_glsl():
def update_glsl(self, nap):
self.enemy_count = 0 # initialize enemy count
for p in self.particles:
if isinstance(p, Enemy) and p.active:
if self.killall:
p.reset() # kill this enemy
else:
self.enemy_count += 1 # increment enemy count
p.advance(nap)
p.update()
self.canvas.clear()
with self.canvas:
Mesh(fmt=self.vfmt, mode='triangles',
indices=self.indices, vertices=self.vertices,
texture=self.texture)
# reset killall
self.killall = False
因此,任何时候你想要统计活跃敌人的数量,只需使用实例enemy_count的属性即可PSWidget。每当你想杀死所有活跃的敌人时,只需设置实例killall的属性即可PSWidget。
至于你的第三个问题,请向我们展示你对此进行编码的尝试。
如果您使用的是我在另一个问题中给出的答案,我建议使用该on_enter()方法来启动游戏更新,那么您可以使用on_leave()它来停止更新。每次进入时游戏动作都会更快,MainScreen因为每次进入都会安排更多更新。MainScreen这是处理该问题的修改:
class MainScreen(Screen):
started = BooleanProperty(False)
def on_enter(self, *args):
if not self.started:
self.ids.game.initialize()
self.started = True
self.update_event = Clock.schedule_interval(self.ids.game.update_glsl, 1.0/60.0)
def on_leave(self, *args):
if self.update_event is not None:
self.update_event.cancel()
添加回答
举报