Android研究之遊戲開發主角與地圖的滾動,android遊戲開發
人物移動地圖的平滑滾動處理
玩過rpg遊戲的朋友應該都知道RPG的遊戲地圖一般都比較大 今天我和大家分享一下在RPG遊戲中如何來處理超出手機螢幕大小的遊戲地圖。
為程式效果動畫圖、
地圖滾動的原理 在本人之前部落格的文章中介紹過人物在螢幕中的移動方式,因為之前拼的遊戲地圖是完全填充整個手機螢幕的,所以無需處理地圖的平滑滾動。這篇文章我著重的向大家介紹一下控制人物移動後地圖滾動的處理方式。舉個例子 如所示 比如人物向右移動,如果地圖貼在螢幕左邊邊界 將先移動人物在地圖的座標,當人物在螢幕中超過三分之二後 則將地圖向人物行走的反方向移動給玩家一種人物還在向右移動的假象,其實這時候人物只是播放向右行走的動畫 在螢幕中的座標不變 ,當地圖向人物行走反方向移動到不能移動的時候 則表示 地圖右側邊界已經貼住手機螢幕右側邊界 這樣地圖則不能在移動 這時候將移動人物在螢幕上的座標直到人物貼住螢幕右側邊界,其它三個方向原理完全一樣。上一章學習了Android研究之遊戲開發之進度條載入不明白的可以去看下。
代碼的實現方式還是以人物向右移動為例,我們須要三個座標 一個是m_HeroPos 來儲存人物在地圖中的X座標 一個是 mScreenPos 來儲存人物在螢幕中的顯示座標 mMapPos 來儲存地圖在手機螢幕中的顯示座標,按鍵盤右鍵後人物在地圖中的座標加上8像素(表示行走的步長),當人物的座標超過螢幕的三分之二的時候需要檢測地圖是否已經在邊界, 使用地圖繪製在螢幕中的X座標 加上地圖的寬度 判斷是否等於螢幕的寬度如果等式不成立 則表示地圖可以向左放移動 這時候後人物mScreenPos人物顯示座標將不變 mMapPos地圖顯示座標將向左移動人物一個步長的位置,如果之前的等式成立 則表示地圖無法在向左移動 這時候mScreenPos人物顯示座標將向右移動人物一個步長的位置 直到螢幕右側邊界 mMapPos地圖顯示座標不會改變。其三個方向的移動演算法完全一樣。
地圖在平滑的滾動
拓展學習之卡馬特地圖緩衝演算法這個遊戲demo 還不能稱之為完美 在與物理層碰撞中還是存在一點問題 不過 最重要的是 沒有使用卡馬克地圖緩衝演算法,下面我詳細介紹一個卡馬克地圖緩衝演算法原理。我們需要一張地圖換沖圖, 為了實現平滑滾動的效果緩衝圖的大小應該是手機螢幕寬高 ,這樣記憶體中就會常駐 一張 手機螢幕大小的緩衝圖。 如果人物向下方行走則表示地圖向上移動,這時候螢幕 將被切割出來了2部分, 上半部分為緩衝圖向上移動後的緩衝內容,下半部分則就是我們需要更新地圖的部分,將更新後的下半部分與地圖緩衝的上半部分結合起來繪製在螢幕中則完成了一次地圖更新,這樣可以大大提升遊戲繪製地圖的效率。如果不使用這種方式來更新地圖 則地圖每移動一次 都須要雙for迴圈重新一個tile一個tile的繪製一遍效率會很低下。 地圖向上移動後更新綠色的地圖部分 與 將上次緩衝的紅色部分結合起來就是新的遊戲地圖,其它方向原理完全一樣。
:如果遊戲中可以按右下方式來移動主角 那麼以螢幕右下角為圓心 地圖就會被切割成4個部分中紅色地區須要更新其中 3 個部分 地圖左邊超出的部分 地圖下面超出的部分 地圖左下方超出的部分,更新的原理和上面一樣。
這麼看來卡馬克不愧是個遊戲領域的天才,馬克地圖緩衝演算法不愧是最最優秀的地圖演算法之一,大家如有有興趣可以去查一查關於卡馬特的資料,他確實是一個頂尖的遊戲開發工程師。歡迎大家下載閱讀,還是那句老話每篇文章都會附帶原始碼的。最後如果你還是覺得我寫的不夠詳細 看的不夠爽 不要緊我把原始碼的貼出來 歡迎大家一起討論學習雨希望可以和大家一起進步。
源碼下載:heromove
開發android遊戲,做橫版過關類的遊戲,怎讓螢幕顯示範圍跟著主角移動?
有
基於android系統的手機遊戲的開發
如果你有興趣為Android平台開發遊戲,有很多你需要瞭解的東西。如果你有過遊戲開發經驗,那麼轉移到移動平台上來將不是特別困難。你主要只需學習其架構以及API就行了。如果你是一名遊戲開發新手,我總結了一張列表,上面有你必需知道的東西,供你起步用。這些知識適用於很多類型的遊戲,包括動作類、策略類、類比類和益智類。 Android是一個基於Java的環境。這對初學者來說是個好訊息,因為相對於C++,Java被廣泛認為是一門更容易上手的語言,它是移動開發的規範。Google也做了一件出色的工作,它將API文檔化並提供範例程式碼供使用。其中有個叫做API Demos的樣本幾乎展示了所有API的功能。如果你熟悉Java並且用過Eclipse,要讓你的第一個應用跑起來那是相當簡單。如果你以前從沒寫過代碼,在你前進路上還要學習很多,但彆氣餒。
擷取SDK
新手上路的第一步便是擷取Android SDK(軟體開發套件)。SDK裡有一個核心類庫,一個模擬器,一些工具和範例程式碼。我強烈建議使用Eclipse和Android Eclipse外掛程式。如果你玩Android的話,Eclipse IDE對Java開發人員來說很好用。如果這是你第一次開發Java項目,你可能會需要下載全套JDK,它裡麵包括簽名和部署你的應用程式的一些工具。
學習應用程式架構
別急著一頭紮進開發的海洋裡,理解Android應用程式架構是很重要的。如果你不學一下,你設計出來的遊戲線上下將很難調試。你將需要理解Applications、Activities、Intents以及它們怎樣相互聯絡。Google提供了很多有用的架構資訊。真正重要的是要理解為什麼你的遊戲需要多於一個的Activity,以及什麼才是設計一個有良好使用者體驗的遊戲。要理解這些,首先要瞭解什麼是Activity生命週期。
學習Activity生命週期
Activity生命週期由Android作業系統來管理。你的activity建立、恢複、暫停、銷毀都受作業系統的支配。正確處理這些事件是很重要的,這樣應用程式才能表現良好,做使用者認為正確的事。在你設計你的遊戲之前瞭解所有這些是如何工作的是件好事,因為以後你可以為自己節省調試時間和昂貴的重新設計時間。對大多數應用來說,預設的設定將工作正常,但對於遊戲,你可能需要考慮將SingleInstance標誌開啟。當設定為預設時,Android在它認為合適時會建立activity的新執行個體。對於遊戲來說,你可能只需要一個遊戲activity的執行個體。這對於你要怎樣管理事務的狀態有些影響,但對於我來說,這解決了一些資源管理的問題,應予以考慮。
主迴圈
根據你寫的遊戲的類型,你可能需要也可能不需要一個主迴圈。如果你的遊戲不依賴於時間或者它僅僅對使用者所做的加以回應,並且不做任何視覺上的改變,永遠等待著使用者的輸入,那麼你就不需要主迴圈。如果你寫的是動作類遊戲或者帶有動畫、定時器或任何自動操作的遊戲,你應該認真考慮下使用主迴圈。
遊戲的主迴圈以一個特定的順序通常儘可能多的在每秒鐘內“滴答”提醒子系統運行。你的主迴圈需要在它自己的線程裡運行,原因是Android有一個主使用介面執行緒,如果你不運行自己的線程,使用介面執行緒將會被你的遊戲所阻塞,這會導致Android作業系統無法正常的更新任務。執行的順序通常如下:狀態,輸入,人工智慧,物理,動畫,聲音,錄影。
更新狀態意思是管理狀態轉換,例如遊戲的結束、人物的選擇或下一個層級。很多時候你需要在某個狀態上等上幾秒鐘,而狀態管理應......餘下全文>>