这是主要方案:KillThemAll Game
在我的constructor
扩展CustomView
课程的SurfaceView
中,我将background
设置为:
this.setBackgroundDrawable(getResources().getDrawable(R.drawable.moon_light));
如果我在SurfaceHolder.Callback()
的一种方法中设置背景,游戏和所有动画都会被冻结......
getHolder().addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
boolean retry = true;
gameLoopThread.setRunning(false);
while (retry) {
try {
gameLoopThread.join();
retry = false;
} catch (InterruptedException e) {}
}
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
createSprites();
gameLoopThread.setRunning(true);
gameLoopThread.start();
setBackgroundDrawable(getResources().getDrawable(R.drawable.moon_light));
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format,
int width, int height) {
}
});
为什么?
答案 0 :(得分:1)
在我看来你只想画一个背景。由于您已在onDraw()
实现中覆盖SurfaceView
来制作动画,因此您不应依赖View
方法进行绘制,因为它们会与您的自定义绘图冲突。
@Override
protected void onDraw(Canvas canvas) {
canvas.drawBitmap(background, 0, 0, null); // background replaces canvas.drawColor(Color.BLACK);
// draw your sprites here
}
您必须确保background
是一个大于画布大小的Bitmap
。您也可以使用drawBitmap (Bitmap bitmap, Rect src, Rect dst, Paint paint)
将其缩放到正确的大小,但不会考虑宽高比。
答案 1 :(得分:0)
替换此行
this.setBackgroundDrawable(getResources().getDrawable(R.drawable.moon_light));
与
bm = BitmapFactory.decodeResource(getResources(), R.drawable.moon_light);
答案 2 :(得分:0)
我认为你在你的src和dest做出错误的反应。试着在日志上打印两者的值,看看它们是否正确