我的surfaceview onDraw方法有时会跳过在屏幕上绘制一些位图,一旦它跳过,它再也不会绘制特定的位图。 我的代码SurfaceView onDraw跳过绘图
public class Board extends SurfaceView implements SurfaceHolder.Callback{
//varaibles declared here
public Board(){
//initaializations here
getHolder().addCallback(this);
}
//my onDraw method
protected void onDraw(Canvas canvas){
for(int u = 0;u<6; u++){
ai.get(u).draw(canvas);//each of these objects draws something on the screen.
human.get(u).draw(canvas);
}
postInvalidate();
}
public void surfaceCreated(SurfaceHolder holder){
gameLoop = new GameLoop(this);
gameLoop.start();
}
的的onDraw()方法被调用在运行游戏循环线程每100毫秒。
public class GameLoop extends Thread{
Board board;
private final int DELAY = 100;
public GameLoop(Board board){
this.board=board;
}
protected void run(){
long beforeTime,timediff,sleep;
beforeTime = System.currentTimeMillis();
while(running)
{
Canvas c = null;
try{
c=board.getHolder.lockCanvas();
synchronized(board.getHolder()){
board.onDraw(c);
}finally{
if(c!=null)
board.getHolder.unlockCanvas(c);
}
timeDiff = System.currentTimeMillis - beforeTime;
sleep = DELAY - timeDiff;
if(sleep<0)
sleep = 10;
try{
Thread.sleep(sleep);
}catch(InterruptedException e){}
beforeTime = System.currentTimeMillis();
}
}
所以这跳过发生这样的:有时(在的onDraw()方法)当U = 0不汲取或u = 5时,它可以是U =任何可能的值,其余的平一旦跳过该值,每次调用onDraw方法时都会跳过它。我希望我能够说清楚。 我希望能帮助解决这个问题。谢谢
由于凸轮。我通过在gameLoop线程postInvalidating修复它,而不是在onDraw方法,它迄今为止工作正常。 – Evans 2012-04-10 12:41:07