gpt4 book ai didi

随机变化的Java变量

转载 作者:行者123 更新时间:2023-11-29 10:18:21 24 4
gpt4 key购买 nike

我正在 Windows 7 上的 Eclipse 中开发粒子引擎,遇到一个以前从未遇到过的问题。我的代码中有这个:

float start = startPosition.getY();
p.position.addTo(p.moveVector);

float end = startPosition.getY();
if(start != end){
System.out.println("hit");
}

而且它确实经常出现打印品。我这样做的原因是因为 startPosition 被改变了,它弄乱了我的程序。

我还进入了调试器并查看了打印机命中时的值,我得到了这个结束,位置和 moveVector 中的所有变量:1.0E-5我不知道该怎么做。

这是我的代码。

粒子发射器 http://tinyurl.com/9ahwodx

粒子 http://tinyurl.com/8rw979d

vector 3f http://tinyurl.com/9do6v2k

有问题的代码在 ParticleEmitter 的底部。

如果您想查看或了解任何其他信息,请告诉我,但我认为这就是所有相关信息。

最佳答案

您的 particleEmiter 构造函数创建了一堆 Particle 对象,每个对象的位置都为 startPosition。

Java 通过引用 传递事物[共享对象(对象“引用”按值传递,因此每个人都共享同一个对象)],因此您的每个 Particle 实例都引用同一个 Vector3f 对象为他们的立场。

当您执行 p.position.addTo(...) 时,您正在更改 Particle 的所有位置,以及 startPosition。

调用Particle构造函数时需要克隆位置。

编辑:

克隆只是“构建具有相同值的新对象”的术语。您可以根据具体情况通过以下方式执行此操作:

new Vector3f(startPosition.x, startPosition.y, startPosition.z)

而不是 startPosition。

虽然这不是很可靠,因为如果 Vector3f 获得某种状态,您需要更新这些调用。 参见 Cloneable一个让你只调用 startPosition.clone() 的接口(interface)。 [呃,大脑卡住]

编辑 2: 或者如指出的那样,在 Vector3f 上放置一个带有 Vector3f 参数的构造函数。当您将位置传递给 Particle 构造函数时,您的代码将变为 new Vector3f(startPosition)

关于随机变化的Java变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11945264/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com