Я делаю простой 2D-игра с холстом в android. Я думаю, этого достаточно для моей игры. Но блокировка и разблокировка операций холста с использованием около 40% 50 CPU. Это нормально? или Что мне делать? Существует мой код игры петли:Android Canvas с использованием слишком большого количества CPU
while(GVars.isGameRunning){
c=holder.lockCanvas();
p.setColor(Color.argb(255, 229, 43, 68));
c.drawRect(GMethods.createRec(0,0,GVars.size[0], 90),p);
for (int i = 0; i < GVars.size[0]/110; i++){
c.drawRoundRect(new RectF(i*100+30,100,i*100+130,100+100),10,10,p);
}
p.setColor(Color.argb(255,255,255,255));
p.setTextSize(50);
c.drawText("Simple text:", 0,60, p);
holder.unlockCanvasAndPost(c);
try{Thread.sleep(GVars.waitTime/*waitTime =30*/);}catch(Exception ex){};
}
Извините за мой английский.
Редактировать: Я попробовал еще раз. (В основной теме) И теперь он использует% 10 процессора. Я думаю, что это то, чего я хочу. : D Спасибо!
@Override
public void onDraw(Canvas c){
p.setTextSize(50);
for (int i = 0; i < GVars.size[0]/110; i++){
p.setColor(Color.argb(255,183, 33, 53));
c.drawRoundRect(new RectF(i*100+i*10, 100+5, i*100+100+i*10, 100+100+10),10,10,p);
}
p.setColor(Color.argb(255,255,255,255));
c.drawText("Test:", 0,60, p);
invalidate();
try{Thread.sleep(20);}catch (Exception ex){}
}
Вы должны использовать механизм событий Android, а не собственный цикл. –
стр. Вы должны также включить класс и метод, который содержит ваш код, чтобы предоставить больше контекста. –
У вас не должно быть 'Thread.sleep()' в 'onDraw()'. Это все равно заморозит основной поток приложения. Вам также не нужно вызывать 'invalidate()'. –