XNA學習筆記 橫版卷軸

2021-09-30 06:32:20 字數 1203 閱讀 5026

不管是side-scrolling(橫版卷軸),還是tilemap,有一點是非常關鍵的,就是不同座標系之間的變換。在三維中有乙個視口變換。二維沒有那麼複雜,但原理是差不多的。角色和地圖上的tile,它們的位置屬於地圖座標,地圖就是它們所在的世界,所以也可以說是世界座標。而在視窗螢幕中繪製主角和tile時,是以螢幕座標為參照系的。在遊戲的邏輯中,角色位置的改變,以及碰撞檢測仍是以地圖座標(世界座標)進行的,因此在draw方法中,必須將角色和tile的地圖座標變換成螢幕座標,從而在螢幕的適當位置顯示出來。

下面是一些具體的**,雖然不是很能體會其精妙之處,不能舉一反三,但大概能夠明白為什麼要這麼做。

在game1類的update方法中,對scroll是這樣處理的:

(hero.position - new vector2(screensize.x / 2f, screensize.y / 2f))

如果角色的位置,還沒有達到螢幕中間,以橫版為例,地圖並不會移動,即if (scroll.x < 0f) scroll.x = 0f;scroll.x = 0f表示橫向沒有滾動。那為什麼要減去scroll呢?因為new vector2(screensize.x / 2f, screensize.y / 2f)是固定的,而hero.position是乙個不斷變大的過程(假如向右移動),離螢幕中心越來越遠,假設前一次移動後,hero.position.x - screensize.x = 10;這次移動後,hero.position.x - screensize.x = 20,改變的是絕對值,而scroll.x是以增量的形式增加的(scroll += ***),即相對值。因此必須減去原來的scroll得到乙個增量,再將這個增量加到scroll上。講得不大清楚。至於乘以 frametime * 20f,是為了讓不同效能的機子都能夠穩定執行該遊戲,因為不同的機子,frametime有可能不一樣,比如對於非常老的機器。

得到了這個scroll,就可以在地圖座標和螢幕座標間變換了。比如在hero類的draw方法中 vector2 location = position - game1.scroll;得到的location是乙個螢幕座標值。在map類的draw方法中

drect.x = (int)(mapseg[l, i].location.x - game1.scroll.x);

drect.y = (int)(mapseg[l, i].location.y - game1.scroll.y);

目標矩形的位置也是螢幕座標值。這樣就解決了從地圖座標到螢幕座標的變換

學習筆記 雜湊學習筆記

hash基本原理 hash就是乙個像函式一樣的東西,你放進去乙個值,它給你輸出來乙個值。輸出的值就是hash值。一般hash值會比原來的值更好儲存 更小 或比較。那字串hash就非常好理解了。就是把字串轉換成乙個整數的函式。而且要盡量做到使字串對應唯一的hash值。它的主要思路是選取恰當的進製,可以...

學習筆記 CentOS 學習筆記01

簡單的做個課堂筆記 虛擬機器用的是vmware,系統是centos cd etc sysconfig network scripts pwdls 顯示列表 cat ifcfg eth0 檢視檔案內容 vi ifcfg eth0 進入vi編輯器 onboot no 原始設定 x逐字刪除 d刪除整行 a...

筆記 spring cloud 學習筆記

1 spring cloud 是什麼 spring cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具 例如配置管理,服務發現,斷路器,智慧型路由,微 控制匯流排 分布式系統的協調導致了樣板模式,使用spring cloud開發人員可以快速地支援實現這些模式的服務和應用程式。他們將在任...