You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python arcade模块实现敌人跟随玩家时触发AttributeError报错

问题诊断

报错AttributeError: 'SpriteList' object has no attribute 'center_y'由两处代码错误共同导致:

  1. 方法调用参数传递错误:你在on_update函数中遍历敌人精灵列表时,给follow_sprite方法传入的第一个参数是整个敌人精灵列表self.enemy_list(属于SpriteList类型),但该方法的self参数预期接收单个Enemy精灵实例。SpriteList是精灵容器类型,本身没有center_y坐标属性,直接访问就会抛出属性不存在的错误。
  2. 敌人实例类型不匹配:你在setup函数中生成敌人时,用Arcade内置的arcade.Sprite基类实例化对象,而非你自己定义的带follow_sprite方法的Enemy子类,就算参数传递正确,普通Sprite实例也无法调用你写的自定义跟随逻辑。
修复方案

按顺序修改两处代码即可解决问题:

  • 修正敌人实例化逻辑
    找到setup函数中循环生成敌人的代码行,将实例化的类替换为自定义Enemy类:
    # 原错误代码
    # enemy = arcade.Sprite(":resources:images/animated_characters/zombie/zombie_idle.png", SPRITE_SCALING)
    # 修改后代码
    enemy = Enemy(":resources:images/animated_characters/zombie/zombie_idle.png", SPRITE_SCALING)
    
  • 修正跟随方法的调用逻辑
    找到on_update函数中遍历敌人调用跟随方法的代码块,改为对单个敌人实例直接调用方法:
    # 原错误代码
    # for enemy in self.enemy_list:
    #     Enemy.follow_sprite(self.enemy_list, self.player_sprite)
    # 修改后代码
    for enemy in self.enemy_list:
        enemy.follow_sprite(self.player_sprite)
    
效果说明

修改完成后重新运行代码,每个敌人精灵会独立执行朝玩家移动的逻辑,不会再抛出属性错误,原有的射击、碰撞检测、计分逻辑不受影响。

内容的提问来源于stack exchange,提问作者riley

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 02:18:19