我使用的是最新版本的libGDX。 我创建了一个体,我想在两个点之间来回传播,称为initialPosition和finalPosition,它们是Vector2。
我将这两个Vector2存储在一个名为travel的数组中。为了让身体从一个点到另一个点,我使用一个名为step的int:当body到达travel [step]时,我将值更改为0或1,具体取决于它之前的值(0或1)
所以基本上,在构造函数中,在构建了我的主体之后:
travel = new Vector2[2];
travel[0] = initialPosition;
travel[1] = finalPosition;
step = 1;
direction = new Vector2();
direction = new Vector2(travel[step].x - body.getPosition().x, travel[step].y - body.getPosition().y);
body.setLinearVelocity(direction.clamp(speed, speed));
在渲染中我有:
System.out.println("initialPosition = " + initialPosition.toString());
if(!new Vector2(travel[step].x - body.getPosition().x, travel[step].y - body.getPosition().y).hasSameDirection(direction)){
if(step > 0)
step = 0;
else step = 1;
direction = new Vector2(travel[step].x - body.getPosition().x, travel[step].y - body.getPosition().y);
System.out.println("Direction change");
}
body.setLinearVelocity(direction.clamp(speed, speed));
所以,问题出在这里:行为绝对不是我想要的。一旦身体到达finalPosition,而不是回到initialPosition,身体只是在finalPosition周围徘徊。
因此,我做了很多控制,我注意到initialPosition正在改变过程中。我用ligne
监视它的值System.out.println("initialPosition = " + initialPosition.toString());
哪里变得非常奇怪: 如果我用
更改渲染代码System.out.println("initialPosition = " + initialPosition.toString());
if(!new Vector2(travel[step].x - body.getPosition().x, travel[step].y - body.getPosition().y).hasSameDirection(direction)){
}
body.setLinearVelocity(direction.clamp(speed, speed));
我有完全相同的问题,而if
语句是空的!
但是,如果我删除了if(){}
,我就有了这段代码:
System.out.println("initialPosition = " + initialPosition.toString());
body.setLinearVelocity(direction.clamp(speed, speed));
问题消失了:initialPosition保持原始值。
哪里变得更加怪异 如果在渲染中我只放了这个代码
System.out.println("--------------------------------------------------------");
System.out.println("initialPosition = " + initialPosition.toString());
System.out.println("body.getPosition() = " + body.getPosition().toString());
initialPosition再次改变!虽然渲染只是在控制台中打印东西! 感谢我在每一步打印的分隔符------我可以看到,在第一步,initialPosition保持其值并且body.getPosition()发生了变化,这是正常的,因为在创建之后我给它施加了一个线性速度的身体。在下一步中,initialPosition采用body.getPosition()的先前值,并再次更改body.getPosition(),依此类推。
有没有人知道这里发生了什么?
答案 0 :(得分:0)
是的,就像我之前在评论initialPosition = body.getPosition();
之前所说的那样,他们引用同一个对象。
查看body.getPosition和javadoc的源代码:Note that the same Vector2 instance is returned each time this method is called.
要更改此行为,请按以下方式初始化initialPosition:
tempPosition = body.getPosition();
initialPosition.x = tempPosition.x;
initialPosition.y = tempPosition.y;