自定义类 - 必须使用新的而不是覆盖。为什么?

时间:2011-04-06 23:46:53

标签: java android multithreading class

我有一个自定义的Vector2类和一个名为tempVect的变量。

我在游戏线程中重复使用它,但最初我只是覆盖了新变量

    tempVect.x = blahhere;
tempVect.y = blahthere;
tempVect = conversion(tempVect); //this just changes the float to * 0.8

if(ball.velocity != tempVector)
    ball.velocity = tempVector;

tempVect.x = thisHere;
tempVect.y = thisThere;
tempVect = conversion(tempVect); 

if(ball.position != tempVector)
    ball.position = tempVector;

for(int i = 0; i < somevairablenum; i++)
{
    tempVect.x = anotherHere;
    tempVect.y = anotherThere;
    tempVect = conversion(tempVect); 
    player.position = tempVect;
}

使用tempVect时,做某些事情会相互冲突。 (所以做某事2将使用原始的blahHere和blahThere)

但是我只是通过

解决了这个问题
tempVect = new Vector2(blahHere, blahThere);

//do something

tempVect = new Vector2(thisHere, thisThere);

//do something different

有人能够解释为什么会这样吗?不幸的是,这是我的大学最终项目,所以我有任何问题我需要写下他们为什么会发生以及我如何解决它们,但我不明白这背后的理论。

其他人可以吗?

TIA

-----编辑------

实际问题是for循环,球员位置与球位置混淆。

2 个答案:

答案 0 :(得分:0)

不幸的是,你遗漏了关键部分 - “做某事”的内容。

然而,很可能其中一个“做某些事情”是在某处隐藏对你的向量的引用,并在稍后引用它的内容。这将导致它在以后查看向量的内容时看到更新的值。

答案 1 :(得分:0)

在第一种情况下,每次使用'tempVect'时,它都引用相同的向量,因此会发生冲突。 当你分配一个新的向量时,你创建一个新对象 - .x和.y成员是不同的 - 它们引用一个不同的对象(即一组不同的变量)。

所以,即使你每次都使用'tempVect'变量,'tempVect'它是一个引用 - 并且通过使用'new'你使它引用不同的对象,所以赋值不会发生冲突 - 因为它们分开对象。