У меня есть игра, которая должна рисовать много фигур на холсте, и в каждом кадре положение этих фигур будет меняться, игра будет работать плавно, но после добавления большего количества фигур возникает некоторая потеря и некоторые кадры сбрасываются. И это просто происходит в устройствах с высокой плотностью (более 320 точек на дюйм).
поскольку фигуры имеют разные позиции, я хочу нарисовать их в многопоточности или так, чтобы код не ожидал рисования.
public void run() {
while (mRunning) {
if (mSurfaceHolder.getSurface().isValid()) {
synchronized (mSurfaceHolder){
canvas = mSurfaceHolder.lockCanvas();
canvas.drawColor(Color.BLACK);
drawOnCanvas(canvas);
mSurfaceHolder.unlockCanvasAndPost(canvas);
}
}
}
функция рисования
public void drawOnCanvas(Canvas canvas) {
new Thread(changeGamePosRunnable).start();
for (int i = 0; i < obstacles.size(); i++) {
Obstacle obstacle = obstacles.get(i);
x= obstacle.getX();
y=obstacle.getY();
// how to run these 2 functions in a new thread to get more speed on drawing
canvas.drawLine(0, 0, x, y, linePaint);
canvas.drawBitmap(bitmap,x,y,null);
}
}
создание нового потока и передача данных должны быть окончательными, и это сбивает меня с толку, и компилятор выдает исключение
Я так новичок в разработке для Android, поэтому, если я выбрал неправильный способ оптимизации производительности, подскажите, пожалуйста, как улучшить производительность при рисовании.
Информация: я создал растровые изображения в конструкторе, инициализируя все переменные из игрового цикла, используя SurfaceView
и реализуя Runnable
, добавил Thread.sleep(5);
в цикл while, пытался уменьшить размер растрового изображения примерно до 240 байт, попытался нарисовать круг вместо растрового изображения снова без изменений.