Я хочу сделать нормальную игру с птичками и так будет выглядеть класс препятствий.Здесь в методе ConfigureNextFrame () я обновляю позиции препятствий и рисую с помощью обычного метода canvas.drawBitmap ().Для рисования препятствий на Android Oreo требуется около 20 мс, в то время как Android Lollipop работает плавно.Это время слишком длинное, потому что есть и другие вещи, которые можно рисовать, и я могу достичь только 15fps.Я использую обычный игровой цикл с SurfaceView и SurfaceHolder.Я также пробовал метод Drawable.draw (canvas), но результаты те же.
private final int obstacleframemove = Variables.esar * Variables.obstacleframemove;
private Bitmap obstacledrawableup;
private Bitmap obstacledrawabledown;
private float left;
private float utop;
private float dtop;
private float right;
private float ubottom;
private float dbottom;
public Flappy50Obstacle(int position, int part) {
obstacledrawableup = Methods.GenerateScaledBitmap(ContextCompat.getDrawable(Variables.currentcontext, R.drawable.flappy50_up), 2f * Variables.easyscalea);
obstacledrawabledown = Methods.GenerateScaledBitmap(ContextCompat.getDrawable(Variables.currentcontext, R.drawable.flappy50_down), 2f * Variables.easyscalea);
left = (int) Variables.width;
utop = position - obstacledrawableup.getHeight() - part;
right = left + obstacledrawableup.getWidth();
ubottom = utop + obstacledrawableup.getHeight();
dtop = position + part;
dbottom = dtop + obstacledrawabledown.getHeight();
}
public void ConfigureNextFrame(Canvas canvas) {
if (Flappy50Panel.GetMoveBackgroundItems()) {
left -= obstacleframemove;
right -= obstacleframemove;
}
long x = System.currentTimeMillis();
canvas.drawBitmap(obstacledrawableup, left, utop, null);
canvas.drawBitmap(obstacledrawabledown, left, dtop, null);
Log.d("TIMEINMILLIS", String.valueOf(System.currentTimeMillis() - x));
}
public Rect GetCoordinatesUp() {
Rect r = new Rect();
r.left = (int) left;
r.top = (int) utop;
r.right = (int) right;
r.bottom = (int) ubottom;
return r;
}
public Rect GetCoordinatesDown() {
Rect r = new Rect();
r.left = (int) left;
r.top = (int) dtop;
r.right = (int) right;
r.bottom = (int) dbottom;
return r;
}
}