【发布时间】:2011-05-29 06:41:10
【问题描述】:
我遇到了一些问题,我很难找到有关如何解决的好信息。首先,我有一个游戏结束屏幕,它会在它应该出现的时候出现。我尝试使用将运行的线程设置为 false 以使其停止运行,然后在触摸屏幕时将其设置回 true,但它不会使屏幕恢复运行。此外,我将需要能够真正清除所有时间,以便它重置它(什么是这样做的好方法)。这同样我需要我假设暂停和恢复。如果 running 未设置为 false ,即使使用 sleep() ,它似乎也会继续运行,只是以较慢的增量。这是我的主题,看看你是否注意到我能做什么。
public class GameLoopThread extends Thread {
private GameView view;
public static boolean running = false;
static final long FPS = 10;
public GameLoopThread(GameView view) {
this.view = view;
}
public void setRunning(boolean run) {
running = run;
}
@Override
public void run() {
long ticksPS = 1000 / FPS;
long startTime;
long sleepTime;
while (running) {
Canvas c = null;
startTime = System.currentTimeMillis();
try {
c = view.getHolder().lockCanvas();
synchronized (view.getHolder()) {
view.onDraw(c);
}
} finally {
if (c != null) {
view.getHolder().unlockCanvasAndPost(c);
}
}
sleepTime = ticksPS-(System.currentTimeMillis() - startTime);
try {
if (sleepTime > 0)
sleep(sleepTime);
else
sleep(10);
} catch (Exception e) {}
}
}
}
现在这部分导致暂停/恢复的大问题。我有一个 handler.postDelayed 处理我的精灵的生成。基本上,当屏幕出现暂停时(因为如果我使用睡眠,它看起来就是这样)问题是处理程序(在 GameView 中)似乎时间仍在运行。有没有办法将它重置为零......最好在 Game Over 的两个类上以及在暂停期间暂停处理程序?谢谢
编辑:截至目前,我正在尝试使用选项菜单通过重新打开运行游戏的活动来制作新游戏。它似乎将其重置,但在此过程中将其冻结。有谁知道我该如何解决这个问题?
@Override
public boolean onCreateOptionsMenu(Menu menu){
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case R.id.newgame:
GameView.gameState=0;
GameLoopThread.running=true;
Intent game = new Intent(PlayGame.this, PlayGame.class);
startActivity(game);
break;
case R.id.pause: Toast.makeText(this, "You pressed Pause", Toast.LENGTH_LONG).show();
break;
case R.id.quit: Toast.makeText(this, "You pressed Quit", Toast.LENGTH_LONG).show();
break;
}
return true;
}
这是我的选项菜单。
【问题讨论】: