У меня есть проблема с моим GameLoop в моей Android Projekt (мой первый Android Projekt):Android Gameloop: Конец игры и начать активность
У меня есть активность, которая начинается Gameview (SurfaceView).
setContentView(new GameView(this));
GameView (SurfaceView) запускает GameThread.
public void surfaceCreated(SurfaceHolder holder) {
Log.d("GameView", "surfaceCreate");
surfaceHolder = holder;
synchronized (this) { //Must be executed exclusively
if (gameLoop == null) {
gameLoop = new GameLoop(); //Start animation here
gameLoop.start();
}
}
}
private class GameLoop extends Thread {
public boolean running = true;
public void run() {
Canvas canvas = null;
final SurfaceHolder surfaceHolder = GameView.this.surfaceHolder;
while (running) {
try {
canvas = surfaceHolder.lockCanvas();
synchronized (surfaceHolder) {
update();
checkCollision();
render(canvas);
}
} finally {
if (canvas != null)
surfaceHolder.unlockCanvasAndPost(canvas);
}
}
}
}
И теперь я могу играть. До этого момента все в порядке.
Если игрок проиграл новое действие (GameOver), и GameThread остановлен. Здесь он падает!
public void endgame() {
Log.d("GameView", "ENDGAME");
this.score.setStopscoring(true);
this.box.stop();
synchronized (surfaceHolder) {
boolean retry = true;
if (gameLoop != null) {
gameLoop.running = false;
while (retry) {
try {
gameLoop.join();
retry = false;
} catch (Exception e) {
}
}
}
}
Context context = getContext();
context.startActivity(new Intent(context, _1GameOver.class));
}
Afte в gameLoop.join();
она замерзает.
Я пробовал много, но ничего не работало. Спасибо за вашу помощь
Спасибо за ваш ответ. Я использовал вашу идею, но это произошло с теми же явлениями, что и bevorher. – partykeller1408
Вы можете распечатать значение gameLoop.running как раз перед тем, как оно зависнет в gameLoop.join()? Какова его ценность? Также вы можете распечатать его в цикле игрового потока? –
Значение gameLoop.runnig находится в начале эндшпиля() true. – partykeller1408