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

使用Dome与Wren开发Flappy Bird遇Bird未实现bird_idle错误求助

问题原因

你遇到的报错是因为Wren中属性的读取(getter)和赋值(setter)是两个完全独立的方法,且下划线开头的实例变量默认是私有属性,外部无法直接访问。你只在Bird类中定义了bird_idle=(value)这个赋值用的setter方法,没有定义读取用的getter方法,所以在Main类第63行尝试读取_bird.bird_idle的时候,系统找不到对应的实现,才会抛出「Bird does not implement bird_idle」的错误。

修复方法

你只需要在Bird类中补充bird_idle、center这些需要外部读取的属性的getter方法即可,修改后的Bird类参考代码如下:

class Bird {
  // 补充需要外部读取的属性的getter
  bird_idle { _bird_idle }
  bird_flap { _bird_flap }
  center { _center }

  // 原有setter如果不需要外部修改属性可以直接删除,不需要保留
  bird_idle=(value){ _bird_idle = value }
  bird_flap=(value){ _bird_flap = value }
  center=(value){ _center = value }
  gravity=(value){ _gravity = value }
  force=(value){ _force = value }
  velocity=(value){ _velocity = value }
  velocityLimit=(value){ _velocityLimit = value }
  isGameRunning=(value){ _isGameRunning = value }

  construct new(idle, flap, horizontalPosition, verticalPosition, drag, jumpForce) {
    _bird_idle = idle
    _bird_flap = flap
    _center = Vector.new(horizontalPosition + (idle.width * 0.5), verticalPosition + (idle.height*0.5))
    _gravity = drag
    _force = jumpForce
    _velocityLimit = 1000
    _isGameRunning = true
  }

  jump() {
    _velocity = -_force
  }

  isTouchingCeiling() {
    var birdTop = _center.y - (_bird_idle.height * 0.5)
    if(birdTop < 0) {
      return true
    }
    return false
  }
  
  isTouchingGround() {
    var birdBottom = _center.y + (_bird_idle.height * 0.5)
    if(birdBottom > height) {
      return true
    }
    return false
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 15:18:04