运行错误:
Traceback (most recent call last):
File "E:/pgame/arcadegame/game16-射击及子㢹.py", line 363, in
main()
File "E:/pgame/arcadegame/game16-射击及子㢹.py", line 359, in main
arcade.run()
File "E:\pgame\venv\lib\site-packages\arcade\window_commands.py", line 323, in run
pyglet.app.run()
File "E:\pgame\venv\lib\site-packages\pyglet\app\__init__.py", line 107, in run
event_loop.run(interval)
File "E:\pgame\venv\lib\site-packages\pyglet\app\base.py", line 184, in run
timeout = self.idle()
File "E:\pgame\venv\lib\site-packages\pyglet\app\base.py", line 245, in idle
self.clock.call_scheduled_functions(dt)
File "E:\pgame\venv\lib\site-packages\pyglet\clock.py", line 277, in call_scheduled_functions
item.func(now - item.last_ts, *item.args, **item.kwargs)
File "E:\pgame\venv\lib\site-packages\arcade\application.py", line 318, in _dispatch_updates
self.dispatch_event('on_update', delta_time)
File "E:\pgame\venv\lib\site-packages\pyglet\window\__init__.py", line 1361, in dispatch_event
super().dispatch_event(*args)
File "E:\pgame\venv\lib\site-packages\pyglet\event.py", line 422, in dispatch_event
if getattr(self, event_type)(*args):
File "E:/pgame/arcadegame/game16-射击及子㢹.py", line 283, in on_update
for bullet in self.scene[LAYER_bullet]:
File "E:\pgame\venv\lib\site-packages\arcade\scene.py", line 75, in __getitem__
raise KeyError(f"Scene does not contain a layer named: {key}")
KeyError: 'Scene does not contain a layer named: zd'
代码:
- # 子弹加载
- if self.can_shoot:
- if self.shoot_pressed:
- arcade.play_sound(self.shoot_sound)
- bullet = arcade.Sprite(
- ":resources:images/space_shooter/laserBlue01.png",
- BULLET_scale,
- )
-
- if self.wanjia.facing_direction == R_facing:
- bullet.change_x = BULLET_speed
- else:
- bullet.change_x = -BULLET_speed
-
- bullet.center_x = self.wanjia.center_x
- bullet.center_y = self.wanjia.center_y
-
- self.scene.add_sprite(LAYER_bullet, bullet)
-
- self.can_shoot = False
- else:
- self.shoot_timer += 1
- if self.shoot_timer == SHOOT_speed:
- self.can_shoot = True
- self.shoot_timer = 0
-
- # 更新敌人及子弹
- self.scene.update([LAYER_enemies]) # , LAYER_bullet
-
- for bullet in self.scene[LAYER_bullet]:
- hit_list = arcade.check_for_collision_with_lists(
- bullet,
- [
- self.scene[LAYER_enemies],
- self.scene[LAYER_tree],
- ],
- )
-
- if hit_list:
- bullet.remove_from_sprite_lists()
-
- for collision in hit_list:
- if (self.scene[LAYER_enemies] in collision.sprite_lists):
- # The collision was with an enemy
- collision.health -= BULLET_shanghai
-
- if collision.health <= 0:
- collision.remove_from_sprite_lists()
- self.score += 100
-
- # Hit sound
- arcade.play_sound(self.hit_sound)
-
- return
原因:
Scene does not contain a layer named: zd
场景不包含名为:zd的层
解决:
在setup中增加
# 增加子弹层 self.scene.add_sprite_list(LAYER_bullet)