Home > Blockchain >  Can't get a game loop to work in Android Studio
Can't get a game loop to work in Android Studio

Time:11-19

So I understand the basics of java programming but when I'm trying to use my little knowledge in android studio it make everything harder having classes and different files needing to be referenced. Coming from python, when making a simple game I would define different functions, then run them in a game loop like

while running:

or something similar. I know to define something in java you go like

public void Example() {}

but when I use this in java, when I try to run the program my game either instantly crashes or doesnt load anything.

The code at the moment is

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

        }


    }
}


And this results in the app not opening. Any help at all would mean a lot to me. Thanks in advance :)

CodePudding user response:

Although I don't actually see a crash, since you didn't really upload one, I can see why you might think your app wont work.

What you are doing constantly in the while loop is that you are only setting the button's click listener over and over again.

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

CodePudding user response:

I'd recommend working with a game engine. If you want to stick with java, libGDX is an option. But if language (and IDE) doesn't matter, than a better option is Godot. The reason why I recommend Godot over some of the more popular game engines is because it's open source, 100% free and plus GDScript (godot's scripting language) is heavily influenced by python.

If you want to make you own game engine in java check out this: https://java-design-patterns.com/patterns/game-loop/#

Keep in mind that the while loop is calling the advance method. So every loop you are setting the view for button and then setting an OnClickListener for it. Not everything needs to be in the while loop.

  • Related