gpt4 book ai didi

java - 线程切换为可运行后 Sprite 不显示

转载 作者:行者123 更新时间:2023-12-02 05:01:24 25 4
gpt4 key购买 nike

我将线程从扩展 Thread 切换为实现 Runnable(实现 Runnable 是更好的做法,对吧?),所以当我调用 surfaceCreated 时,我从:

public void surfaceCreated(SurfaceHolder holder) {
createSprites();
gameLoopThread.setRunning(true);
gameLoopThread.start();
}

至:

public void surfaceCreated(SurfaceHolder holder) {
createSprites();
gameLoopThread.setRunning(true);
gameLoopThread.run();
}

因为start()方法不包含在Runnable接口(interface)中。然而,一旦我切换了这个,我的 Sprite 就不再显示了。这是 run() 方法:

public void run() {
Canvas c;
while (running) {
c = null;
try {
c = view.getHolder().lockCanvas();
synchronized (mPauseLock) {
view.onDraw(c);
}
} finally {
if (c != null) {
view.getHolder().unlockCanvasAndPost(c);
}
}

synchronized (mPauseLock) {
while (mPaused) {
try {
mPauseLock.wait();
} catch (InterruptedException e) {
}
}
}

}
}

它在两种情况下都会被调用,但 Sprite 仅在我调用 start() 而不是直接调用 run() 时显示。有人能解释一下这是为什么吗?

最佳答案

您无法启动 Thread通过调用 gameLoopThread.run()对于Runnable (或者甚至通过调用 run() 获取 Thread )。您必须通过您的Runnable实例到 Thread实例并调用start()为此Thread .

例如:

public void surfaceCreated(SurfaceHolder holder) {
createSprites();
gameLoopThread.setRunning(true);
Thread t = new Thread(gameLoopThread);
t.start();
}

关于java - 线程切换为可运行后 Sprite 不显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28260233/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com