Jes*_*sky 5 android surfaceholder
我正在制作一款游戏,因为我是Android新手,所以我的设计基于示例LunarLander代码.在它的设计中,GameThread.doStart()调用from GameActivity,然后线程从其GameThread.run()循环运行所有内容,如下所示(为清楚起见,大部分代码已被删除):
public class GameActivity extends Activity
{
public void onCreate(Bundle savedInstanceState)
{
gameView = new GameView(this);
fl = new FrameLayout(this);
fl.addView(gameView);
setContentView(fl);
gameThread = gameView.getThread();
gameThread.doStart();
}
}
Run Code Online (Sandbox Code Playgroud)
.
class GameThread extends Thread
{
public void doStart()
{
}
public void run()
{
while (running)
{
Canvas c = null;
try
{
c = mSurfaceHolder.lockCanvas();
// Use canvas
}
finally
{
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
为了解决我遇到的一些问题,我试图将更多控制权交给GameActivity,如下所示:
public class GameActivity extends Activity
{
public void onCreate(Bundle savedInstanceState)
{
gameView = new GameView(this);
fl = new FrameLayout(this);
fl.addView(gameView);
setContentView(fl);
gameThread = gameView.getThread();
while (gameThread.isRunning())
{
gameThread.run();
}
}
}
Run Code Online (Sandbox Code Playgroud)
.
class GameThread extends Thread
{
public void doStart()
{
}
public void run()
{
Canvas c = null;
try
{
c = mSurfaceHolder.lockCanvas();
// Use canvas
}
finally
{
}
}
}
Run Code Online (Sandbox Code Playgroud)
除非我这样做,否则lockCanvas()总是返回null,因此我无法在屏幕上绘制任何内容.正如我所说,我还是Android的新手,所以我不知道为什么第二种情况不起作用.任何人都知道发生了什么或为什么不起作用?
编辑:从我测试过,表面永远不会创建.GameView.onResume()我在活动期间等待表面创建然后继续游戏,但它等待了永远.为什么第一个实例是表面创建的唯一情况?
您将在创建活动中启动一个线程,而它应该仅在 SurfaceView 创建并准备就绪时启动。检查第二个,SurfaceView 示例:How can I use the Animation Framework inside the canvas?
| 归档时间: |
|
| 查看次数: |
15566 次 |
| 最近记录: |