SurfaceView ужасная производительность

Поэтому я в основном создаю физический 2D-движок, который я хочу использовать для других проектов в будущем. Единственная проблема здесь - производительность моего Surface View. Я получаю постоянные 60 обновлений логики в секунду, но только 6 кадров в секунду, независимо от того, что я делаю. Если я вызываю метод draw() в моем вычислительном потоке, я получаю 6 кадров в секунду. Если я создам совершенно новый поток, который только рисует, без каких-либо задержек в цикле

    @Override
public void run() {
    while(running) {
        if(holder.getSurface().isValid()) {

            canvas = holder.lockCanvas();

            canvas.drawColor(Color.DKGRAY);
            for (GameObject object : objects) {object.draw(canvas);}

            holder.unlockCanvasAndPost(canvas);
        }
        gs.totalFrames++;
    }
}

(gs = Game Surface) Я получаю 6 кадров в секунду. Функция draw() моего игрового объекта довольно проста:

public void draw(Canvas canvas) {
    canvas.drawCircle((float) x, (float) y, 10, paint);
}

Почему производительность так плоха? (У меня есть только 5 игровых объектов, так что это 5 кругов, что не должно быть проблемой производительности!) Я также попытался запустить публикацию с задержкой, но это тоже было плохо. Вызов функции draw() в GameSurface из потока вместо рисования непосредственно в нем ничего не изменил. Небольшая задержка тоже не улучшила.

Должен ли я каким-то образом использовать SurfaceView таким образом, чтобы его не предполагалось использовать? В чем проблема?

0 ответов

Другие вопросы по тегам