这是主要方案:KillThemAll Game

在扩展constructor类的CustomViewSurfaceView中,将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) {
        }
    });


为什么?

最佳答案

在我看来,您只想绘制背景。由于您已经在实现中设置了onDraw()来制作动画,因此您不应该依赖SurfaceView方法来绘制图形,因为它们会与自定义图形冲突。

@Override
protected void onDraw(Canvas canvas) {
    canvas.drawBitmap(background, 0, 0, null); // background replaces canvas.drawColor(Color.BLACK);
    // draw your sprites here
}


您只需要确保View是大于画布大小的background。您也可以使用Bitmap将其缩放到合适的大小,但它不会考虑纵横比。

关于android - 我的Surface View 无法正常工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21955025/

10-12 02:00