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