Мой метод поверхностного просмотра 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. Я надеюсь, что смог сделать это достаточно ясно.
Буду признателен за помощь в решении этой проблемы. Спасибо