雨松MOMO帶你走進(jìn)游戲開發(fā)的世界之?dāng)z像頭的原理以及更新
雨松MOMO原創(chuàng)文章如轉(zhuǎn)載,請注明:轉(zhuǎn)載自
雨松MOMO的博客
原文地址:
http://blog.csdn.net/xys289187120/article/details/6624479

游戲中攝像頭的原理介紹
在游戲開發(fā)中更新攝像頭的位置可以決定屏幕顯示的內(nèi)容,尤其是RPG類游戲攝像頭有著非常重要的作用,我舉一個例子 有時候我們在玩RPG游戲的時候進(jìn)入一個新的場景 觸發(fā)一段腳本后 發(fā)現(xiàn)鏡頭開始向上移動 根據(jù)鏡頭移動玩家可以大概瀏覽一下這個場景有什么東西 ,觸發(fā)什么樣的劇情。這個實現(xiàn)的方式就是游戲攝像頭原理。
如圖所示:首先攝像頭顯示的區(qū)域也是手機(jī)屏幕顯示的區(qū)域 如果需要更改攝像頭的位置 其實是更改背景地圖的位置 利用程序拖動背景地圖 給玩家一種假象讓玩家感覺像是攝像頭在移動而不是背景地圖在移動。
游戲中地圖的繪制原理介紹
根據(jù)地圖編輯器生成的出來的數(shù)組的每一個tile 的 ID 找到每一個tile的地圖資源原始文件的XY坐標(biāo) 算出來圖片的顯示位置利用程序的切割的方法把每一個tile切割出來顯示在手機(jī)屏幕中。
切割圖片的代碼所示:
canvas.save();
切割圖片之前先把Canvas保存起來 然后在切割 繪制結(jié)束后
canvas.restore();
在把Canvas的在狀態(tài)重置回來 如果不這么做的話 第一張圖片切割后就會擋住以后所有的圖片,所以大家一定要記住這一點喔。
在游戲開發(fā)中更新攝像頭的位置可以決定屏幕顯示的內(nèi)容,尤其是RPG類游戲攝像頭有著非常重要的作用,我舉一個例子 有時候我們在玩RPG游戲的時候進(jìn)入一個新的場景 觸發(fā)一段腳本后 發(fā)現(xiàn)鏡頭開始向上移動 根據(jù)鏡頭移動玩家可以大概瀏覽一下這個場景有什么東西 ,觸發(fā)什么樣的劇情。這個實現(xiàn)的方式就是游戲攝像頭原理。
如圖所示:首先攝像頭顯示的區(qū)域也是手機(jī)屏幕顯示的區(qū)域 如果需要更改攝像頭的位置 其實是更改背景地圖的位置 利用程序拖動背景地圖 給玩家一種假象讓玩家感覺像是攝像頭在移動而不是背景地圖在移動。
游戲中地圖的繪制原理介紹
根據(jù)地圖編輯器生成的出來的數(shù)組的每一個tile 的 ID 找到每一個tile的地圖資源原始文件的XY坐標(biāo) 算出來圖片的顯示位置利用程序的切割的方法把每一個tile切割出來顯示在手機(jī)屏幕中。
切割圖片的代碼所示:
canvas.save();
切割圖片之前先把Canvas保存起來 然后在切割 繪制結(jié)束后
canvas.restore();
在把Canvas的在狀態(tài)重置回來 如果不這么做的話 第一張圖片切割后就會擋住以后所有的圖片,所以大家一定要記住這一點喔。

如圖所示:每一張tile的繪制原理就是這樣,說到這里有些朋友可能就要問 如果我的地圖無限大那根據(jù)這個方法豈不是要循環(huán)無限次?其實屏幕須要繪制的tile數(shù)量只需要繪制屏幕顯示區(qū)域以內(nèi)的, 屏幕現(xiàn)實區(qū)域以外的我們不用考慮繪制 只需要更新地圖的坐標(biāo)數(shù)據(jù)就可以,比如我的模擬器屏幕的大小是320X480 那么我實際繪制的tile數(shù)量只是 10 X15 (塊)。其實游戲開發(fā)繪制中還有一個更重要的繪制技術(shù)就是雙緩沖技術(shù)它可以用來解決屏幕閃爍問題,下一章中我會詳細(xì)介紹。
昨天有朋友跟我提出這種用數(shù)組的方式來繪制地圖不科學(xué)我很同意他的觀點 ,為什么不科學(xué)? 原因是現(xiàn)在我們只有一個場景我們用一個數(shù)組來繪制地圖 萬一我們的游戲有100個場景 我們豈不是要在程序中寫100個數(shù)組了?其實在實際開發(fā)中我們是把這些地圖的信息轉(zhuǎn)成xml文件 打到游戲的包中 玩家在切換游戲場景的時候便會讀取當(dāng)前游戲場景中的地圖xml文件。其實這些xml文件中也是保存這地圖的二位數(shù)組信息 但是這樣做的好處就是數(shù)據(jù)驅(qū)動 程序員不用定義N個數(shù)組 做N種判斷 只須要根據(jù)當(dāng)前切換的場景的ID就可以得到地圖的信息 十分方便 也可以避免代碼中由于筆誤造成的的錯誤 何樂而不為。
但是不管用任何方法處理數(shù)據(jù) 它的繪制原理都是一樣的。
如何更新游戲中攝像頭
效果圖:程序取隨機(jī)數(shù)更新游戲攝像頭
目前以每10000毫秒更新一下攝像頭的位置 (隨機(jī)數(shù)) 我們有了攝像頭的位置以后 就可以在算出背景圖片的相對顯示位置 移動背景圖片的位置后就可以給玩家制造出一種攝像頭在移動的假象了。
地圖塊是我新拼的 長寬的tile塊數(shù)是20X20。
最后如果你還是覺得我寫的不夠詳細(xì) 看的不夠爽 不要緊我把源代碼的下載地址貼出來 歡迎大家一起討論學(xué)習(xí)
雨松MOMO希望可以和大家一起進(jìn)步。
下載地址: http://download.csdn.net/source/3460437
昨天有朋友跟我提出這種用數(shù)組的方式來繪制地圖不科學(xué)我很同意他的觀點 ,為什么不科學(xué)? 原因是現(xiàn)在我們只有一個場景我們用一個數(shù)組來繪制地圖 萬一我們的游戲有100個場景 我們豈不是要在程序中寫100個數(shù)組了?其實在實際開發(fā)中我們是把這些地圖的信息轉(zhuǎn)成xml文件 打到游戲的包中 玩家在切換游戲場景的時候便會讀取當(dāng)前游戲場景中的地圖xml文件。其實這些xml文件中也是保存這地圖的二位數(shù)組信息 但是這樣做的好處就是數(shù)據(jù)驅(qū)動 程序員不用定義N個數(shù)組 做N種判斷 只須要根據(jù)當(dāng)前切換的場景的ID就可以得到地圖的信息 十分方便 也可以避免代碼中由于筆誤造成的的錯誤 何樂而不為。
但是不管用任何方法處理數(shù)據(jù) 它的繪制原理都是一樣的。
如何更新游戲中攝像頭
效果圖:程序取隨機(jī)數(shù)更新游戲攝像頭



目前以每10000毫秒更新一下攝像頭的位置 (隨機(jī)數(shù)) 我們有了攝像頭的位置以后 就可以在算出背景圖片的相對顯示位置 移動背景圖片的位置后就可以給玩家制造出一種攝像頭在移動的假象了。
地圖塊是我新拼的 長寬的tile塊數(shù)是20X20。

最后如果你還是覺得我寫的不夠詳細(xì) 看的不夠爽 不要緊我把源代碼的下載地址貼出來 歡迎大家一起討論學(xué)習(xí)
雨松MOMO希望可以和大家一起進(jìn)步。
下載地址: http://download.csdn.net/source/3460437
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
