• KeyError: ‘Scene does not contain a layer named: zd‘错误分析


    运行错误:

    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'

    代码:

    1. # 子弹加载
    2. if self.can_shoot:
    3. if self.shoot_pressed:
    4. arcade.play_sound(self.shoot_sound)
    5. bullet = arcade.Sprite(
    6. ":resources:images/space_shooter/laserBlue01.png",
    7. BULLET_scale,
    8. )
    9. if self.wanjia.facing_direction == R_facing:
    10. bullet.change_x = BULLET_speed
    11. else:
    12. bullet.change_x = -BULLET_speed
    13. bullet.center_x = self.wanjia.center_x
    14. bullet.center_y = self.wanjia.center_y
    15. self.scene.add_sprite(LAYER_bullet, bullet)
    16. self.can_shoot = False
    17. else:
    18. self.shoot_timer += 1
    19. if self.shoot_timer == SHOOT_speed:
    20. self.can_shoot = True
    21. self.shoot_timer = 0
    22. # 更新敌人及子弹
    23. self.scene.update([LAYER_enemies]) # , LAYER_bullet
    24. for bullet in self.scene[LAYER_bullet]:
    25. hit_list = arcade.check_for_collision_with_lists(
    26. bullet,
    27. [
    28. self.scene[LAYER_enemies],
    29. self.scene[LAYER_tree],
    30. ],
    31. )
    32. if hit_list:
    33. bullet.remove_from_sprite_lists()
    34. for collision in hit_list:
    35. if (self.scene[LAYER_enemies] in collision.sprite_lists):
    36. # The collision was with an enemy
    37. collision.health -= BULLET_shanghai
    38. if collision.health <= 0:
    39. collision.remove_from_sprite_lists()
    40. self.score += 100
    41. # Hit sound
    42. arcade.play_sound(self.hit_sound)
    43. return

    原因:

    Scene does not contain a layer named: zd

    场景不包含名为:zd的层

    解决:

    在setup中增加

    # 增加子弹层
    self.scene.add_sprite_list(LAYER_bullet)
  • 相关阅读:
    Android FileProvider笔记
    GalNAc-siRNA甘露糖/半乳糖修饰脱氧核糖核酸|siRNA-S-S-DSPE(RNA修饰技术介绍)
    智慧农业建设方案中的物联网技术
    函数—描述现实世界现象的基本工具
    使用 Redis 作为缓存的 Spring Boot 应用
    linux文件类型
    茂莱光学科创板上市:拟募资4亿 范一与范浩兄弟为实控人
    java中获取主机信息InetAddress类的两种方法
    web基础与http协议
    Linux和windows之间文件传输解决方案
  • 原文地址:https://blog.csdn.net/fqfq123456/article/details/127792971