在画布上渲染位图[Java - Android]

时间:2015-04-06 21:26:25

标签: java android canvas android-canvas android-bitmap

我在Android上使用SurfaceView和Canvas进行游戏。对于玩家来说,我会根据他走路的方向使用4张照片。 好吧,为了不花费大量时间,在构造函数中我为每个方向定义了4个位图:

public void initImages(){
        right = BitmapFactory.decodeResource(con.getResources(), R.drawable.player_right);
        right = Bitmap.createScaledBitmap(self, size, size, true);
        left= BitmapFactory.decodeResource(con.getResources(), R.drawable.player_left);
        left = Bitmap.createScaledBitmap(self, size, size, true);
        up = BitmapFactory.decodeResource(con.getResources(), R.drawable.player_up);
        up = Bitmap.createScaledBitmap(self, size, size, true);
        down = BitmapFactory.decodeResource(con.getResources(), R.drawable.player_down);
        down = Bitmap.createScaledBitmap(self, size, size, true);
}

当我移动玩家时,我称之为这种方法:

public void right(){
        x++;
        self = right;
}

其中self是我正在使用的当前位图。 问题是当我运行游戏时,位图没有改变,我总是有相同的位图。

我已经尝试过了:

public void right(){
        x++;
        self = BitmapFactory.decodeResource(con.getResources(), R.drawable.player_right);
        self = Bitmap.createScaledBitmap(self, size, size, true);
}

但是它会导致一些问题而且实际上非常慢。

我做错了什么?有什么建议吗?

编辑:这是整个班级代码

public Player(Activity con, int x, int y){
    this.con = con;
    Player.x = x;
    Player.y = y;
    body = new Paint();
    life = 3;
    self = BitmapFactory.decodeResource(con.getResources(), R.drawable.normal);
    self = Bitmap.createScaledBitmap(self, size, size, true);
    initImages();
}

public void draw(Canvas canvas){
    canvas.drawBitmap(self, x*size, y*size, body);
    //called in the game loop
}

public void right(){
    x++;
    self = right;
}

public void initImages(){
    right = BitmapFactory.decodeResource(con.getResources(), R.drawable.player_right);
    right = Bitmap.createScaledBitmap(self, size, size, true);
    left= BitmapFactory.decodeResource(con.getResources(), R.drawable.player_left);
    left = Bitmap.createScaledBitmap(self, size, size, true);
    up = BitmapFactory.decodeResource(con.getResources(), R.drawable.player_up);
    up = Bitmap.createScaledBitmap(self, size, size, true);
    down = BitmapFactory.decodeResource(con.getResources(), R.drawable.player_down);
    down = Bitmap.createScaledBitmap(self, size, size, true);
}

1 个答案:

答案 0 :(得分:0)

你的onDraw是怎样的?

通常你有HandlerRunnable看起来像

Runnable r = new Runnable{
    @Override
    run(){
    invalidate(); //<- tells the View its images arent right so it calls onDraw again.
    }
};

和onDraw末尾的myHandler.postDelayed(r, FRAME_RATE);。 FRAME_RATE为30fps为30或60fps为15,但您当然可以使用其他值。