Я делаю графический интерфейс для игры (Open Gl).То есть у меня экран 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
код (включая Gui
s):
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
в основном onUpdate()
:
@Override
public abstract void onUpdate(); // in Scene
@Override
public void onUpdate() // in WorldScene
{
if(!this.isInGamePause)
{
... this some in-game code
this.client.selectedGuiScreen.close(); // close once
}
else if(this.isInGamePause)
{
...
this.client.selectedGuiScreen.open(); // open once
this.client.selectedGuiScreen.onUpdate();
}
...
this.updateFrameTime();
this.client.getGameWindow().updateViewport();
this.client.getGameWindow().updateWindow();
...
}
Следующий шаг - метод my GuiScreen.class
`` onUpdate () `` `:
public GameObject onUpdate()
{
for(Gui guiContent : this.allContent)
{
guiContent.onUpdate();
if(guiContent.getId() == 0)
{
SimplePrint.message("Before: ScreenPosX: " + this.position.x);
SimplePrint.message("Before: Current Gui PosX: " + guiContent.position.x);
SimplePrint.message("Before: Current Gui Start PosX: " + guiContent.startPosition.x);
}
this.moveRelaviteContent(guiContent);
if(guiContent.getId() == 0)
{
SimplePrint.message("After: ScreenPos: " + this.position.x);
SimplePrint.message("After: Current Gui PosX: " + guiContent.position.x);
SimplePrint.message("After: Current Gui Start PosX: " + guiContent.startPosition.x);
}
System.exit(0);
}
return this;
}
И напоследок, если кому интересно, мои guiContent.onUpdate()
:
@Override
public GameObject onUpdate()
{
if(this.scale.x() <= 0) this.scale.x = 0.2f;
if(this.scale.y() <= 0) this.scale.y = 0.2f;
if(this.scale.x() >= 2) this.scale.x = 2f;
if(this.scale.y() >= 2) this.scale.y = 2f;
//this.rotateGui();
return super.onUpdate();
}
Ps: Сразу скажу, что ошибок в других методах у меня нет.Я просто дважды проверил 100 раз.
И самое интересное, что я в тестовом проекте тестировал и guiContent.position = guiContent.startPosition + this.position;
работал так, как я планировал.Пожалуйста помогите а то я уже 3 дня не могу понять в чем проблема.