这个问题是不同的,因为它是关于创建一个3D世界编辑器..目前我想让我的模型的更新位置工作..
所以我已经解决了一个相当简单的问题。为了更新场景,我希望有一个布尔外观,如果给出了一个特定的输入,然后一旦给出这个输入,然后从false变为true ..我的问题是,输入方法必须在另一个类中,我不要不知道我怎么能从那里影响布尔值..这是代码:
public class EngineSetup extends Game
{
public boolean doStuff = true;
public void Init()
{
CreationTool updateCoords = new CreationTool(this);
while(doStuff == true) { updateCoords.Environment(); doStuff = false; }
}
}
发动机启动时会发生这种情况。它只在我的CreationTool类中运行一次Environment方法,因为在第一次执行之后doStuff变为false。
public class CreationTool extends GameComponent
{
public void Input(float delta)
{
if(Input.GetKeyUp(getCoords))
// change the boolean value in EngineSetup to true
}
}
在CreationTool类中,我有这个Input方法,getCoords只是一个输入键的变量。
所以我的想法是,一旦我按下回车键,EngineSetup类中的布尔值设置为true,环境方法再次被执行,布尔值再次变回假。
如何更改CreationTool类中的布尔值,如上所述?
非常感谢您的帮助!
编辑:我得到了一些答案,但没有一个有效。public class EngineSetup extends Game
{
private static EngineSetup INSTANCE;
public boolean doStuff = true;
public void Init()
{
INSTANCE = this;
CreationTool updateCoords = new CreationTool(this);
while(doStuff == true) { System.out.println("Work"); doStuff = false; }
}
public class CreationTool extends GameComponent
{
public void Input(float delta)
{
if(Input.GetKeyUp(getCoords))
{ EngineSetup.getInstance().doStuff=true; }
}
}
它在程序启动时第一次工作但当我点击输入时没有任何反应。
public class EngineSetup extends Game
{
public static boolean doStuff = true;
public void Init()
{
CreationTool updateCoords = new CreationTool(this);
while(doStuff == true) { System.out.println("Work"); doStuff = false; }
}
public class CreationTool extends GameComponent
{
public void Input(float delta)
{
if(Input.GetKeyUp(getCoords))
EngineSetup.doStuff = true;
}
}
这也没有用,第一次当程序开始一切都很好但是当我点击输入时:没有...
如何解决..?
答案 0 :(得分:0)
好的,我已经重新调整了我的代码,并让布尔按照我想要的方式工作。我将布鲁格从EngineSetup类移动到CreationTool类,其中Input是从那里更改booelans:
public class EngineInput extends Game
{
public void Init()
{
if(CreationTool.doStuff == true) {
System.out.println("updateVegetation "+CreationTool.doStuff);
this.UpdateVegetation(); // method that updates coordinates
} else
if(CreationTool.doStuff == false)
System.out.println("updateVegetation "+CreationTool.doStuff);
}
}
在我的CreationTool类中,我可以影响布尔值:
public class CreationTool extends GameComponent
{
public static boolean doStuff = true;
EngineInput updateVegetation = new EngineInput();
public void Input(float delta)
{
if(doStuff == true) { if(Input.GetKeyUp(getCoords)) { System.out.println(doStuff); doStuff = false; updateVegetation.UpdateVegetation(); } } else
if(doStuff == false) { if(Input.GetKeyUp(getCoords)) { System.out.println(doStuff); doStuff = true; updateVegetation.UpdateVegetation(); } }
}
}
感谢您的帮助!一旦我按下回车键,现在正在从文本文件中读取坐标,但更新的位置仍然只在重新启动程序后才会呈现,这是我需要解决的另一个谜题。
答案 1 :(得分:-1)
好的,假设EngineSetup类是Singleton。它只会创建一个对象。
您应该创建一个静态实例变量和一个get方法!
document.location.href
现在你只需要这样做:public class EngineSetup extends Game
{
private static EngineSetup INSTANCE;
public boolean doStuff = true;
public void Init()
{
INSTANCE = this;
CreationTool updateCoords = new CreationTool(this);
while(doStuff == true) { updateCoords.Environment(); doStuff = false; }
}
public static EngineSetup getInstance(){
return INSTANCE;
}
}
答案 2 :(得分:-2)
您可以doStuff
静态(public static boolean doStuff = true;
),以便在没有EngineSetup
类实例的情况下访问它。
然后,在CreationTool.Input(float)
方法中,您可以说EngineSetup.doStuff = true;
。