[英]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.