1 回答
TA贡献1921条经验 获得超9个赞
我已将您的构造函数减少到最少,以显示 和 的this.position问题this.startPosition。this.rotation和也存在同样的问题this.scale- 您必须将解决方案this.position也应用于这两个字段......
public GameObject(float posX, float posY, float posZ,
float rotX, float rotY, float rotZ,
float scaleX, float scaleY, float scaleZ)
{
this();
this.position = new Vector3f(0, 0, 0); // 1
this.startPosition = new Vector3f(posX, posY, posZ); // 2
this.position = this.startPosition; // 3
}
您在线// 1创建一个Vector3f(A) 并将对其的引用分配给this.position。
您在线// 2创建另一个Vector3f(B) 并将对其的引用分配给this.startPosition。
在线,您可以用存储在 中的 (B)引用覆盖存储在 中的 (A)// 3引用。Vector3fthis.positionVector3fthis.startPosition
从这一点开始,引用与this.position相同,所以只是 的另一个名称(两者都指相同的内存位置)。Vector3fthis.startPositionthis.position.xthis.startPosition.x
要解决您的问题,您必须分配一个this.startPosition克隆this.position
public GameObject(float posX, float posY, float posZ,
float rotX, float rotY, float rotZ,
float scaleX, float scaleY, float scaleZ)
{
this();
this.position = new Vector3f(0, 0, 0); // 1
this.startPosition = new Vector3f(posX, posY, posZ); // 2
this.position = new Vector3f(this.startPosition); // 3
}
现在, line// 3创建一个新的、独立的Vector3f,它恰好具有与 引用的起始值相同的起始值this.startPosition。
添加回答
举报