2010-09-25 32 views
1

我目前正試圖用自上而下的視角寫一個簡單的射擊遊戲。我使用SurfaceView和Canvas在屏幕上繪製圖形,但我無法找到如何使「相機」滾動。 玩家角色總是在屏幕的中心,相機(SurfaceView的畫布基本上)應該一直跟着他(例如,像在外星人羣中一樣)。但是,我無法弄清楚如何以一種常規的方式來實現這一點。我現在的做法是根據玩家的輸入移動遊戲世界中的所有其他物體,並在座標恰好在屏幕上時進行繪製。玩家始終保持在同一座標上。 有什麼方法可以實際移動(滾動)SurfaceView本身?我看到了Scroll小部件和SurfaceView.scrollBy(int x,int y)方法,但是我嘗試實現其中的任何一個都會導致Force Close。 任何幫助表示讚賞,在此先感謝!如何在android中編程滾動遊戲攝像頭?

P.S.請注意 - 我對此項目使用公開GL沒有興趣。

回答

1

您可以在繪製完成後使用翻譯來滑動屏幕內容。如果字符是留在中間,你會寫代碼,看起來像這樣:

draw_the_screen(); 
canvas.translate(x,y); 
draw_the_avatar(); 

當翻譯,一切直到這一點將被翻譯。繪製頭像時,平移(滑動)已經發生,並且在繪製它的任何地方(即:屏幕的中心)都會結束。

希望這會有所幫助。

+0

謝謝,這是有益的,但我不得不動用玩家冷杉,翻譯,然後繪製畫面,以使其發揮作用。我覺得很奇怪。這裏是我的代碼: px = px + accelerometer_x; py = py + accelerometer_y; canvas.drawBitmap(mObj4,50,350,null); ((float)px,(float)py); canvas.drawCircle(218,368,10,p); 這不起作用,因爲風景(mObj)保持靜止,但角色(圓圈)在屏幕中移動。它應該是相反的,當我切換drawObj和drawCircle的地方它的作品。奇怪的。 – Kiril 2010-09-26 21:55:29

2

正如Kiril在他的評論中指出的那樣,上面的答案是不正確的。 實現了簡單的滾動攝像頭,你需要

  1. 翻譯畫布的球員位置
  2. 的反轉座標繪製背景
  3. 轉換回(0,0)
  4. 繪製玩家

所以,把在代碼

//Translate to -playerX, -playerY and draw the background 
canvas.translate(-playerX, -playerY); 
background.draw(); 

//Translate back to 0,0 and draw the player 
canvas.translate(playerX, playerY); 
player.draw(); 

這樣,玩家總是停留在屏幕上的相同位置,您會看到背後的背景。

有一點需要注意的是,canvas.translate(x,y)不會將畫布轉換爲座標(x,y)。它按照指定的距離進行翻譯。起初這可能會讓人困惑。

例子:

  1. 你在(0,0)
  2. 你叫canvas.translate(2,3)
  3. 你叫canvas.translate(-1,-1)
  4. 你現在是在(1,2)