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

Java,从另一个类更改布尔值,java,boolean,Java,Boolean,这个问题是不同的,因为它是关于创建3D世界编辑器的。。目前,我想让我的模型的更新位置发挥作用 所以我找到了一个相当简单的问题。为了更新场景,如果给定了特定的输入,我希望有一个布尔外观,然后在给定该输入后从false变为true。。但我的问题是,输入法必须在另一个类中,我不知道如何从那里影响布尔值。。代码如下: public class EngineSetup extends Game { public boolean doStuff = true; public void In

这个问题是不同的,因为它是关于创建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类中只运行一次环境方法,因为在第一次执行之后,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类中,我有这个输入方法,getCoords只是enter键的一个变量

因此,我的想法是,一旦我按下enter键,EngineSetup类中的布尔值就被设置为true,环境方法将再次执行,布尔值将再次更改为false

如何更改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;
    }
}
同样,这也不起作用,第一次程序启动时一切正常,但当我点击回车键时:nothing


如何修复..?

您可以将
doStuff
设置为静态(
public static boolean doStuff=true;
),这样就可以在没有
EngineSetup
类实例的情况下访问它


然后,在
CreationTool.Input(float)
方法中,您可以说
EngineSetup.doStuff=true

好,让我们假设EngineSetup类是一个单例。将只创建其中的一个对象

您应该创建一个静态实例变量和一个get方法

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;
    }
}

现在您只需要这样做:
EngineSetup.getInstance().doStuff=true

好的,我已经对代码进行了一些重构,并让布尔函数按我想要的方式工作。我将布尔值从EngineSetup类移动到CreationTool类,其中输入为,并从那里更改布尔值:

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(); } }
    }
}

谢谢你的帮助!一旦我按下enter键,坐标现在就从文本文件中读取,但是更新的位置仍然只有在重新启动程序后才会呈现,这是我需要解决的另一个谜题。

Java中的方法名称是
lowerCamelCase
CreationTool似乎将EngineSetup的实例作为其构造函数中的参数。为什么不利用这个来设置布尔值呢?我不认为这真的是重复的。那里的答案是专门针对那个职位的。我觉得我的答案更一般、更好。非常感谢,我会尝试一下。。当然,我认为EngineSetup只创建了一次。。至少要理解..@DisasterCoder如果这解决了您的问题,请将我的答案标记为正确,如果可以,请向上投票!我目前被禁止提问,所以我只能回答XD。您已经有一个EngineSetup实例被传递给CreationTool,只需将其设置为CreationTool中的状态,并在需要时设置布尔值。这里不需要任何静态。我不知道@JamesB,但我仍然认为这是一个有效的答案。是的,但这可以在不使用静态方法和变量的情况下实现。@DisasterCoder您使用
println
where测试了它?显示一些代码。我现在要编辑我的答案,并显示我尝试过但仍然无效的内容。。