无法在Android Studio中运行游戏循环

cgh8pdjw  于 2022-11-20  发布在  Android
关注(0)|答案(2)|浏览(158)

所以我了解java编程的基本知识,但是当我尝试使用我在android studio中的一点知识时,它会让所有事情变得更困难,因为有类和需要引用的不同文件。

while running:

或者类似的东西。我知道用java来定义一些东西

public void Example() {}

但是当我在Java中使用这个时,当我试图运行这个程序时,我的游戏要么立即崩溃,要么不加载任何东西。
目前的代码是

public class MainActivity extends AppCompatActivity {

    //Variables
    Boolean running = true;
    public int years = 0;

    //Setup Year Counter
    TextView textView = (TextView) findViewById(R.id.year_counter);

    //Advance Button
    public void advance() {
        ImageButton button = (ImageButton) findViewById(R.id.advance);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                years += 1;
                textView.setText("" + years + "");
            }
        });
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //Game Loop
        while (running) {
            advance();

        }

    }
}

这导致应用程序无法打开。任何帮助对我来说都意味着很多。提前感谢:)

mec1mxoz

mec1mxoz1#

虽然我实际上没有看到崩溃,因为你没有真正上传一个,我可以理解为什么你可能会认为你的应用程序不会工作。
您在while循环中经常做的事情是,您只是一遍又一遍地设置按钮的click侦听器。

public class MainActivity extends AppCompatActivity {

    //Variables
    Boolean running = true;
    public int years = 0;

    //Setup Year Counter
    TextView textView;
    ImageButton button;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // you set up your views once, after the layout is inflated
        setUpViews();
        
        // you initialize your buttons functionality
        initClickEvents();

        //Game Loop
        while (running) {
            // do other stuff
        }
    }
    
    private void setUpViews() {
        textView = (TextView) findViewById(R.id.year_counter);
        button = (ImageButton) findViewById(R.id.advance);
    }
    
    private void initClickEvents() {
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                years += 1;
                textView.setText("" + years + "");
            }
        });
    }
}
pinkon5k

pinkon5k2#

我建议使用游戏引擎。如果你想坚持使用java,libGDX是一个选择。但是如果语言(和IDE)不重要,一个更好的选择是Godot。我推荐Godot而不是一些更流行的游戏引擎的原因是因为它是开源的,100%免费,加上GDScript(godot的脚本语言)受到python的严重影响。
如果你想在java中制作自己的游戏引擎,看看这个:https://java-design-patterns.com/patterns/game-loop/#
记住while循环调用的是advance方法,所以每次循环都要为button设置view,然后再为它设置OnClickListener,并不是所有的东西都需要在while循环中。

相关问题