Java,从另一个类更改布尔值

时间:2015-07-23 22:37:40

标签: java boolean

这个问题是不同的,因为它是关于创建一个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;
    }
}

这也没有用,第一次当程序开始一切都很好但是当我点击输入时:没有...

如何解决..?

3 个答案:

答案 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;