因此,我一直试图弄清楚如何将形状和图像绘制到surfaceview。 iv一直在使用多个教程。但现在我输了。我有一个拥有我的游戏循环的线程,并且从我理解的是我在这个循环中拥有所有变量更新
public void run() {
Canvas c;
while (running) {
c = null;
try {
c = surfaceHolder.lockCanvas(null);
synchronized (surfaceHolder) {
//Insert methods to modify positions of items in onDraw()
}
} finally {
if (c != null) {
surfaceHolder.unlockCanvasAndPost(c);
}
}
}
}
我有一个具有onDraw(Canvas画布)方法的surfaceView。假设我想在我的屏幕上添加椭圆,我如何从我的线程
中的while循环中执行此操作我目前在我的线程类中有这些变量
private SurfaceHolder surfaceHolder;
private gameMain gamePanel; //my surfaceview class
private boolean running;
我需要在我的surfaceview类中使用它吗?
setWillNotDraw(false);
如果我完全错误的话,人们会指出它。我不想使用openGL或任何库
答案 0 :(得分:1)
所以我给这个问题的解决方案是改变它所说的地方:
try {
c = view.getHolder().lockCanvas();
synchronized (view.getHolder()) {
view.onDraw(c);
}
} finally {
if (c != null) {
view.getHolder().unlockCanvasAndPost(c);
}
}
在GameLoopThread类的run()方法中:
try {
c = view.getHolder().lockCanvas();
synchronized (view.getHolder()) {
if(c != null)
view.onDraw(c);
}
} finally {
if (c != null) {
view.getHolder().unlockCanvasAndPost(c);
}
}
要完成此活动并拨打另一个活动,我添加了一个名为GameOver的方法,效果很好:
private void GameOver() {
gameLoopThread.setRunning(false);
Context c = getContext();
c.startActivity(intent); //intent must be declared
((Activity) Pruebas.this.getContext()).finish();
}
我希望这有助于某人。