android холст анимированный фон? - PullRequest
0 голосов
/ 26 января 2020

Я пытаюсь оживить фон в игре, которую я создаю. https://imgur.com/kQGWsLu Должно выглядеть так (ужасное качество записи) Моя первая попытка хорошо работает на моем телефоне, но многие люди увидели, что их fps сократился вдвое:

 public void draw(Canvas canvas, Paint paint) {
    if (mPaint == null) {
        mPaint = new Paint();
        mPaint.setColor(Color.GRAY);
        mPaint.setStrokeWidth(1);
        mPaint.setAntiAlias(true);
        mPaint.setStyle(Paint.Style.FILL_AND_STROKE);
        mPaint.setShader(new RadialGradient(canvas.getWidth() / 4, canvas.getHeight() / 3,
            Math.max(1, canvas.getHeight() / 2), Color.rgb(5, 12, 127), Color.rgb(32, 36, 100), Shader.TileMode.REPEAT));
    }
    width = canvas.getWidth();
    height = canvas.getHeight();
    canvas.save();
    rotation += 4;
    if (rotation > 360)
        rotation = 0;
    canvas.rotate(rotation, width / 2, height / 2);
    canvas.drawCircle(width / 2, height / 2, height * 1.3f, mPaint);
    canvas.restore();
}

Так что теперь я Я думаю о предварительной визуализации изображения и рисования его в виде растрового изображения, которое покрывает экран и вращается вместо него. Я также сократил расчеты, чтобы вместо этого обновлять только каждый второй кадр.

   public void draw(Canvas canvas, Paint paint) {
    if (!initiated) {
        centerX = (int) (canvas.getWidth() / 2);
        centerY = (int) (canvas.getHeight() / 2);
        width = (int) (canvas.getWidth() * 2f);
        height = (int) (canvas.getHeight() * 2f);
        map = factory.GFX().getBackground();
        initiated = true;
    }
    if (!skipUpdate) {
        x = CalculatorService.getXCircle(rotation, distance, centerX);
        y = CalculatorService.getYCircle(rotation, distance, centerY);

        body.set((int) x - width / 2,
            (int) y - height / 2,
            (int) x + (width / 2),
            (int) y + (height / 2));
        rotation += rotationSpeed;
        if (rotation > 360)
            rotation = 0;
    }
    skipUpdate = !skipUpdate;

    canvas.drawBitmap(map, null, body, paint);
}

Хотя, поскольку изображение маленького размера 320 * 320, мне пришлось увеличить его и нарисовать больше, чем экран, чтобы избежать его перемещения. за границей и показывая базовый c черный фон, и я не уверен, если это действительно улучшение, есть ли у кого-нибудь лучший способ сделать это или какие-либо советы о том, как я могу улучшить?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...