Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android游戲開發實踐之人物移動地圖的平滑滾動處理

Android游戲開發實踐之人物移動地圖的平滑滾動處理

編輯:關於Android編程

如圖所示為程序效果動畫圖

地圖滾動的原理

在本人之前博客的文章中介紹過人物在屏幕中的移動方式,因為之前拼的游戲地圖是完全填充整個手機屏幕的,所以無需處理地圖的平滑滾動。這篇文章我著重的向 大家介紹一下控制人物移動後地圖滾動的處理方式。舉個例子 如上圖所示 比如人物向右移動,如果地圖貼在屏幕左邊邊界 將先移動人物在地圖的坐標,當人物在屏幕中超過三分之二後 則將地圖向人物行走的反方向移動給玩家一種人物還在向右移動的假象,其實這時候人物只是播放向右行走的動畫 在屏幕中的坐標不變 ,當地圖向人物行走反方向移動到不能移動的時候 則表示 地圖右側邊界已經貼住手機屏幕右側邊界 這樣地圖則不能在移動 這時候將移動人物在屏幕上的坐標直到人物貼住屏幕右側邊界,其它三個方向原理完全一樣。

代碼的實現方式

還是以人物向右移動為例,我們須要三個坐標 一個是m_HeroPos 來保存人物在地圖中的X坐標 一個是 mScreenPos 來保存人物在屏幕中的顯示坐標 mMapPos 來保存地圖在手機屏幕中的顯示坐標,按鍵盤右鍵後人物在地圖中的坐標加上8像素(表示行走的步長),當人物的坐標超過屏幕的三分之二的時候需要檢測地圖是 否已經在邊界, 使用地圖繪制在屏幕中的X坐標 加上地圖的寬度 判斷是否等於屏幕的寬度如果等式不成立 則表示地圖可以向左放移動 這時候後人物mScreenPos人物顯示坐標將不變 mMapPos地圖顯示坐標將向左移動人物一個步長的位置,如果之前的等式成立 則表示地圖無法在向左移動 這時候mScreenPos人物顯示坐標將向右移動人物一個步長的位置 直到屏幕右側邊界 mMapPos地圖顯示坐標不會改變。其三個方向的移動算法完全一樣。

如圖所示地圖在平滑的滾動

拓展學習之卡馬特地圖緩沖算法

這個游戲demo 還不能稱之為完美 在與物理層碰撞中還是存在一點問題 不過 最重要的是 沒有使用卡馬克地圖緩沖算法, 下面我詳細介紹一個卡馬克地圖緩沖算法原理。我們需要一張地圖換沖圖, 為了實現平滑滾動的效果緩沖圖的大小應該是手機屏幕寬高 ,這樣內存中就會常駐 一張 手機屏幕大小的緩沖圖。 如果人物向下方行走則表示地圖向上移動,這時候屏幕 將被切割出來了2部分, 上半部分為緩沖圖向上移動後的緩沖內容,下半部分則就是我們需要更新地圖的部分,將更新後的下半部分與地圖緩沖的上半部分結合起來繪制在屏幕中則完成了一 次地圖更新,這樣可以大大提升游戲繪制地圖的效率。如果不使用這種方式來更新地圖 則地圖每移動一次 都須要雙for循環重新一個tile一個tile的繪制一遍效率會很低下。

如圖所示 地圖向上移動後更新綠色的地圖部分 與 將上次緩沖的紅色部分結合起來就是新的游戲地圖,其它方向原理完全一樣。

如圖所示:如果游戲中可以按右下方式來移動主角 那麼以屏幕右下角為圓心 地圖就會被切割成4個部分下圖中紅色區域須要更新其中 3 個部分 地圖左邊超出的部分 地圖下面超出的部分 地圖左下方超出的部分,更新的原理和上面一樣。

這麼看來卡馬克不愧是個游戲領域的天才,馬克地圖緩沖算法不愧是最最優秀的地圖算法之一,大家如有有興趣可以去查一查關於卡馬特的資料,他確實是一個頂尖的游戲開發工程師。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved