我很难找到这个错误,似乎类Icon的字段pos隐藏了类Element的pos字段,仅在绘图函数中。
case class Vector2(val x: Float, val y: Float) { ... }
abstract class Element(var pos: Vector2) {
def draw(): Unit
}
class Icon(pos: Vector2, var texture: String) extends Element(pos) {
override def draw() {
...
GL11.glTranslatef(pos.x, pos.y, 0f)
...
}
}
稍后的:
// Create an icon with an initial position
val icon = new Icon(pos = Vector2(40,20), "crosshair")
// Draw all elements
elements.foreach{_.draw()} // => draws icon at (40,20)
// Setting a new position for icon
icon.pos = Vector2(100,200)
// See if it worked
Log.info(icon.pos.toString()) // => this prints Vector2(100,200)
// Draw all elements
elements.foreach{_.draw()} // => still draws icon at (40,20)
我看过这篇文章并尝试过:
- 在基类中使 var 抽象:这可以防止我为 Element 设置新的 pos
- 重命名构造函数参数(例如_pos):我不会这样做,因为这会搞砸API
- 覆盖派生类中的 var:只是编译器告诉我不能覆盖可变变量
出路是什么?