0
我正在Android上用SurfaceView和Canvas进行游戏。对于玩家,我根据他走路的方向使用4张图片。 好了,为了不花费大量的时间,在构造函数中,我定义4位图的每个方向:在画布上渲染位图[Java-Android]
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);
}
为什么初始化initImages()和right()中的所有变量两次? – Arlind
我正在寻找解决方案,真正的问题是为什么“self = right”不起作用 –
self是正在呈现的位图。告诉我更多关于invalidate()的信息 –