【发布时间】:2015-03-31 00:03:41
【问题描述】:
我正在用 android 制作游戏,我有两个扩展 SurfaceView 的类(TitleView 和 GameView)。我也有一个 GameLoopThread,我在 TitleView 中初始化,它在这个视图中绘制我的所有位图,但它只在这个视图中有效。所以当我想改成GameView的时候,我怎么只在TitleView中初始化GameLoopThread而不是在GameView中,最后这个是黑屏,因为什么都没有画出来。
有人可以帮助我吗?
这是我的 GameLoopThread 类:
@SuppressLint("WrongCall")
public class GameLoopThread extends Thread {
static final long FPS = 25;
//private GameView view;
private TitleView tview;
private boolean running = false;
public GameLoopThread(TitleView titleView) {
this.tview = titleView;
}
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 = tview.getHolder().lockCanvas();
synchronized (tview.getHolder()) {
tview.onDraw(c);
}
} finally {
if (c != null) {
tview.getHolder().unlockCanvasAndPost(c);
}
}
sleepTime = ticksPS - (System.currentTimeMillis() - startTime);
try {
if (sleepTime > 0) {
sleep(sleepTime);
} else {
sleep(25);
}
} catch (Exception e) {
// TODO: handle exception
}
}
}
}
【问题讨论】:
标签: android multithreading android-activity view surfaceview