我目前正在尝试为Android开发游戏。为此,我使用Android Studio并使用SurfaceView控件绘制图像。问题是表面视图仅在两帧之间切换。我正在开发API级别15并使用模拟器。
示例:我的精灵的X位置以50px逐帧增加
第1帧:在(100,100)处绘制精灵,X位置= 100
第2帧:在(150,100)处绘制精灵,X位置= 150
第3帧:在(200,100)处绘制精灵,X位置= 200
第4帧:在(150,100)处绘制精灵,X位置= 250
第5帧:在(200,100)处绘制精灵,X位置= 300
然后它会以相同的方式继续(第2帧,第3帧,第2帧......等),同时正确增加x坐标。
奇怪的是,游戏正常运行的前几帧,然后这个循环开始。我知道X-Position值正确递增(从调试器中查找)。
我通过重新启动模拟器解决了问题,但我想知道这个问题是否会再次发生在该应用的真实用户身上。顺便说一句,我来自Visual Studio和Windows Phone,因此我对android没有太多经验。
我的GameThread类: 注意:SpriteBatch扩展了SurfaceView并实现了SurfaceHolder.Callback
public class GameThread extends Thread
{
private boolean running = false;
private SpriteBatch canvas = null;
private SurfaceHolder surfaceHolder = null;
public GameThread(SpriteBatch sp)
{
super();
this.canvas = sp;
this.surfaceHolder = sp.getHolder();
}
public void startThread()
{
running = true;
super.start();
}
public void stopThread()
{
running = false;
}
public void run()
{
Canvas c = null;
while (running)
{
c = null;
try
{
c = surfaceHolder.lockCanvas();
synchronized (surfaceHolder)
{
if (c != null)
{
canvas.onDraw(c);
}
}
sleep(16);
}
catch(InterruptedException ie)
{
}
finally
{
if (c != null)
{
surfaceHolder.unlockCanvasAndPost(c);
}
}
}
}
}
SpriteBatch.onDraw:
public void onDraw(Canvas canvas)
{
StartTime=System.nanoTime();
canvas.drawColor(Color.WHITE);
//Created under initialization
//Paint PaintCommand=new Paint();
//PaintCommand.setAlpha(100);
//MyMatrix=new Matrix();
//MyMatrix.postScale(0.5f,0.5f);
//MyMatrix.postTranslate(50,50);
canvas.drawBitmap(MyTexture, MyMatrix, PaintCommand);
EndTime=System.nanoTime();
Game1.Elapsed=(float)((EndTime-StartTime)/1000000000f);
}