我在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);
}
答案 0 :(得分:0)
你的onDraw是怎样的?
通常你有Handler
,Runnable
看起来像
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,但您当然可以使用其他值。