【发布时间】:2012-03-23 17:02:34
【问题描述】:
我的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 方法时它都会跳过它的值。我希望我能够说得足够清楚。 我很感激帮助解决这个问题。谢谢
【问题讨论】:
标签: android surfaceview ondraw