2015-04-06 83 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,但您當然可以使用其他值。