2015-04-06 80 views
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); 
} 
+0

为什么初始化initImages()和right()中的所有变量两次? – Arlind

+0

我正在寻找解决方案,真正的问题是为什么“self = right”不起作用 –

+0

self是正在呈现的位图。告诉我更多关于invalidate()的信息 –

回答

0

请问你的onDraw样子?

通常你有一个Handler,一个Runnable看起来像

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

myHandler.postDelayed(r, FRAME_RATE);在你的onDraw结束。 FRAME_RATE对于30fps为30,对于60fps则为15,但您当然可以使用其他值。