Я попытался создать лабиринт с движущимся шаром и отверстием с помощью датчика акселерометра. С помощью следующего кода мяч попадает в отверстие, но производительность очень плохая, я устанавливаю Accelerometer Frequency на самую быструю, но это все, кроме гладкого. Я сделал второй холст, потому что я мог сделать дыру.Гладкое растровое движение в холсте (android)
public RenderView(Context context, int width, int height) {
super(context);
playGround = new Rect(40, 40, width - 40, height - 40);
holes.addElement(new PointF(500f, 500f));
// Set background
this.setBackgroundResource(R.drawable.bottom);
// Set bitmap
woodGround= wood.createBitmap(width, height, Bitmap.Config.ARGB_8888);
bitmapCanvas = new Canvas();
bitmapCanvas.setBitmap(woodGround);
// Set eraser paint properties
eraserPaint.setAlpha(0);
eraserPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));
eraserPaint.setAntiAlias(true);
}
protected void onDraw(Canvas canvas) {
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG
| Paint.FILTER_BITMAP_FLAG);
paint.setStyle(Style.FILL_AND_STROKE);
paint.setAntiAlias(true);
if (ballInHole)
canvas.drawBitmap(ball, b.x, b.y, paint);
bitmapCanvas.drawBitmap(wall, 0, 0, paint);
bitmapCanvas.drawBitmap(wood, playGround, playGround, paint);
canvas.drawBitmap(bitmap, 0, 0, paint);
for (PointF h : holes) {
bitmapCanvas.drawCircle(h.x + radius, h.y + radius, radius,
eraserPaint);
}
if (!ballInHole)
canvas.drawBitmap(ball, b.x, b.y, paint);
invalidate();
}
Это решается очень некрасиво, потому что я просто рисовать мяч ниже других растровых изображений, когда он попадает в отверстие. Есть ли другой способ сделать это?
Производительность также очень плохая, я установил Accelerometer-Sensor-Delay на самый быстрый, но мяч не работает ровно. Когда я удаляю линию canvas.drawBitmap(bitmap, 0, 0, paint);
, тогда мяч становится более плавным, но тогда деревянный фон прочь.
Это сработало, я разделил его на разные взгляды, спасибо! Теперь это намного более гладко. – theyanu