Можно ли рисовать фигуры на (а) холсте в несколько потоков java (android) - PullRequest
0 голосов
/ 05 сентября 2018

У меня есть игра, которая должна рисовать много фигур на холсте, и в каждом кадре положение этих фигур будет меняться, игра будет работать плавно, но после добавления большего количества фигур возникает некоторая потеря и некоторые кадры сбрасываются. И это просто происходит в устройствах с высокой плотностью (более 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 байт, попытался нарисовать круг вместо растрового изображения снова без изменений.

...