簡體   English   中英

無法讓游戲循環在 Android Studio 中運行

[英]Can't get a game loop to work in Android Studio

所以我了解 java 編程的基礎知識,但是當我嘗試在 android 工作室中使用我的小知識時,它讓一切都變得更加困難,因為需要引用類和不同的文件。 來自 python,在制作簡單游戲時,我會定義不同的函數,然后在游戲循環中運行它們,例如

while running:

或類似的東西。 我知道在 java 你 go 中定義一些東西

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

        }


    }
}


這導致應用程序無法打開。 任何幫助對我來說意義重大。 提前致謝:)

我建議使用游戲引擎。 如果您想堅持使用 java,可以選擇 libGDX。 但如果語言(和 IDE)無關緊要,那么更好的選擇是 Godot。 我之所以推薦 Godot 而不是一些更流行的游戲引擎,是因為它是開源的,100% 免費,而且 GDScript(godot 的腳本語言)深受 python 的影響。

如果你想在 java 中創建你自己的游戲引擎,請查看: https://java-design-patterns.com/patterns/game-loop/#

請記住,while 循環正在調用 advance 方法。 所以每個循環你都在為按鈕設置視圖,然后為它設置一個 OnClickListener。 並非所有內容都需要在 while 循環中。

雖然我實際上沒有看到崩潰,但由於您沒有真正上傳崩潰,我明白為什么您可能認為您的應用程序無法運行。

你在while循環中不斷做的是你只是一遍又一遍地設置按鈕的點擊監聽器。

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

您必須實施(覆蓋) render方法(在游戲循環中調用)。 我建議嘗試文檔中的完整示例。 ``

@Override
public void render() {
   ScreenUtils.clear(0, 0, 0.2f, 1);
   advance();
   ...

``

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM