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。
添加回答
舉報