1

我目前正在创建一个游戏,并且我已经制作了 3 个主要类 - GameView(它扩展了surfaceview)、GameViewThread(这是一个用于surfaceview 的线程)和一个MainActivity。我想在 SurfaceView 中输入背景图像,但无法弄清楚如何执行此操作。

setBackground()在 GameView的方法中使用onDraw也不行。我将非常感谢你们可以为我提供的任何帮助。

这是我的 GameView 类:

public class GameView extends SurfaceView implements SurfaceHolder.Callback {
    private Bitmap bmp1;
    private SurfaceHolder holder;
    private GameLoopThread gameLoopThread;
    private Sprite sprite;
    private float sensorX = 0;

    private Platform platform[] = new Platform[7];
    private Bonus GravUp[] = new Bonus[3];
    private Bonus GravDown[] = new Bonus[3];

    private Bitmap bmp2;
    private Bitmap bmp3;
    private boolean collision;
    private int a;
    private int b;
    private int c1;
    private double c2;
    int agility = 50;
    private Bitmap bmp4;

    public double getsensorX() {
        return sensorX;
    }

    public double setsensorX(float s) {
        return sensorX = s;
    }

    synchronized public int getSpriteY() {
        return sprite.y;
    }

    synchronized public int getSpriteX() {
        return sprite.x;
    }

    synchronized public int getSpriteHeight() {
        return sprite.height;
    }

    synchronized public int getSpriteWidth() {
        return sprite.width;
    }

    public GameView(Context context) {
        super(context);
        gameLoopThread = new GameLoopThread(this);
        holder = getHolder();
        holder.addCallback(this);
        bmp1 = BitmapFactory.decodeResource(getResources(), R.drawable.russel);
        sprite = new Sprite(this);
        sprite.getBMP(bmp1);
        bmp2 = BitmapFactory.decodeResource(getResources(), R.drawable.brick);
        bmp3 = BitmapFactory.decodeResource(getResources(), R.drawable.gravup);
        bmp4 = BitmapFactory.decodeResource(getResources(), R.drawable.gravdown);
        for (int i = 0; i < GravUp.length; i++) {
            GravUp[i] = new Bonus(this, bmp3);
        }
        for (int i = 0; i < GravDown.length; i++) {
            GravDown[i] = new Bonus(this, bmp4);
        }

        for (int i = 0; i < platform.length; i++) {
            Random r = new Random();
            platform[i] = new Platform(this, bmp2, 850 + 200 * i,
                    400 - r.nextInt(250));

        }

    }

    @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) {
        gameLoopThread.setRunning(true);
        gameLoopThread.start();
    }

    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width,
            int height) {
    }


    @Override
    protected void onDraw(Canvas canvas) {
        canvas.drawColor(Color.YELLOW);
        sprite.Draw(canvas);
        for (int i = 0; i < platform.length; i++) {
            platform[i].Draw(canvas);
        }
        for (int i = 0; i < GravUp.length; i++) {
            GravUp[i].Draw(canvas);
        }
        for (int i = 0; i < GravDown.length; i++) {
            GravDown[i].Draw(canvas);
        }
    }

我的 MainActivity 类:

public class MainActivity extends Activity {


    GameView gameView;
    FrameLayout game;
    RelativeLayout GameButtons;
    Button butOne;
    Button butTwo;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        gameView = new GameView(this);
        game = new FrameLayout(this);
        GameButtons = new RelativeLayout(this);     
        RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
                RelativeLayout.LayoutParams.MATCH_PARENT,
                RelativeLayout.LayoutParams.MATCH_PARENT);
        GameButtons.setLayoutParams(params);

        game.addView(gameView);
        game.addView(GameButtons);
        setContentView(game);
}
}

如何使用保存在res/drawable-hdpi文件夹中的图像作为游戏的背景?我应该在 GameView 或 MainActivity 中使用该命令吗?如果您需要更多信息以帮助我,请告诉我!谢谢

4

0 回答 0