我正在为游戏制作 GUI(Open Gl)。也就是说,我有一个 Gui Screen,上面添加了其他组件。所以我想让所有其他GUI相对于GuiScreen的原始位置向左移动。它有效,但不符合我的要求,这完全违背逻辑。
这里我有这种情况(此代码在 onUpdate() 中运行,只需执行每一帧):
private void moveRelativeContent(Gui guiContent)
{
guiContent.position.x = guiContent.startPosition.x + this.position.x();
guiContent.position.y = guiContent.startPosition.y + this.position.y();
}
正如你所看到的,我只是使用分配。也就是说,我将内容位置分配为List<Gui>原始内容位置加上当前 GuiScreen 位置的总和。那就是guiContent.position需要每一帧始终如此guiContent.startPosition + this.position;。这是合乎逻辑的。但对我来说,这工作很奇怪。我每一帧都guiContent.position增加。就好像他在用+=命令而不是=命令一样。
方法之前的值:
Before: ScreenPosX: 0.02
Before: Current Gui PosX: 0.0039999485
Before: Current Gui Start PosX: 0.0039999485
方法后的值:
After: ScreenPos: 0.02
After: Current Gui PosX: 0.023999948
After: Current Gui Start PosX: 0.023999948
首先查看我的初始化GameObject代码(包括Guis):
public GameObject(float posX, float posY, float posZ,
float rotX, float rotY, float rotZ,
float scaleX, float scaleY, float scaleZ)
{
this();
...
this.startPosition = new Vector3f(posX, posY, posZ);
this.startRotation = new Vector3f(rotX, rotY, rotZ);
this.startScale = new Vector3f(scaleX, scaleY, scaleZ);
this.position = this.startPosition;
this.rotation = this.startRotation;
this.scale = this.startScale;
...
}
这是这个构造函数的另一个版本:
public GameObject(Vector3f position, Vector3f rotation, Vector3f scale)
{
this(position.x(), position.y(), position.z(),
rotation.x(), rotation.y(), rotation.z(),
scale.x() , scale.y() , scale.z() );
}
public GameObject(Vector2f position, Vector2f rotation, Vector2f scale)
{
this(position.x(), position.y(),
rotation.x(), rotation.y(),
scale.x() , scale.y() );
}
接下来从哪里开始更新GuiScreen。这段代码来自我的Scene并WorldScene.class在 main 中onUpdate():
@Override
public abstract void onUpdate(); // in Scene
最有趣的是,我在测试项目中guiContent.position = guiContent.startPosition + this.position;
按照我的预期进行了测试和工作。请帮忙,我已经三天无法理解这个问题了。
郎朗坤
相关分类