
一、游戲里45度角俯瞰圖叫什么
游戲里45度角俯瞰圖通常被稱為斜45度視角、2.5D視角或斜角地圖。以下是對(duì)這些名稱的詳細(xì)解釋:
斜45度視角:這是最直觀的命名方式,源于視角與水平面形成45度夾角的特點(diǎn)。這種視角通過傾斜的鏡頭角度,使玩家既能觀察到角色的頂部特征(如發(fā)型、裝備),又能看到部分側(cè)面動(dòng)作(如行走、攻擊)。其核心優(yōu)勢(shì)在于平衡立體感與平面信息展示——相比純俯視視角(90度),45度角能通過陰影和透視增強(qiáng)場(chǎng)景層次感;相比純側(cè)視或第一人稱視角,又能同時(shí)呈現(xiàn)多個(gè)方向的物體,便于玩家規(guī)劃路徑或觀察戰(zhàn)場(chǎng)全局。
2.5D視角:該名稱強(qiáng)調(diào)了視角的“混合維度”特性。在技術(shù)實(shí)現(xiàn)上,游戲場(chǎng)景可能使用2D精靈圖(平面圖像)拼接,但通過45度角的透視投影模擬3D效果。角色和建筑可能以2D形式繪制,但通過分層排列和縮放處理,營造出“偽3D”的縱深感。這種命名也反映了游戲設(shè)計(jì)中的妥協(xié):既保留2D開發(fā)的低成本優(yōu)勢(shì)(如像素風(fēng)格游戲),又通過視角設(shè)計(jì)提升沉浸感,常見于策略游戲、RPG或橫版動(dòng)作游戲。
斜角地圖:這一術(shù)語更多用于描述地圖的拼接方式。傳統(tǒng)2D地圖通常以正方形網(wǎng)格拼接,但斜45度視角下,地圖需轉(zhuǎn)換為菱形網(wǎng)格以匹配視角的傾斜方向。角色向上移動(dòng)時(shí),實(shí)際在地圖中可能沿菱形的對(duì)角線方向前進(jìn)。這種設(shè)計(jì)要求開發(fā)者重新規(guī)劃碰撞檢測(cè)、路徑算法和視覺對(duì)齊,確保角色與環(huán)境的交互符合透視邏輯。斜角地圖常見于經(jīng)典策略游戲(如《文明》系列早期作品)或塔防游戲,通過傾斜視角擴(kuò)大單屏信息量,同時(shí)保持2D引擎的效率。
實(shí)際應(yīng)用中,這些名稱可能交叉使用,但核心均指向通過45度傾斜視角平衡視覺表現(xiàn)與開發(fā)成本的設(shè)計(jì)方案。
二、2d游戲斜45度地圖遮擋處理
2D游戲斜45度地圖遮擋處理可以采用菱形地磚格子處理和基于物體位置和體積的排序處理兩種方式。
一、菱形地磚格子處理
地磚格子組織:在這種方式中,地圖被劃分為一系列菱形地磚格子。游戲中的所有地圖組件(如建筑物、樹木等)都按照這些地磚格子的規(guī)格進(jìn)行組織,并放置到地網(wǎng)中。遮擋處理算法:通過遮擋處理算法,系統(tǒng)可以確定每個(gè)地圖組件的繪制順序。這個(gè)順序是基于組件在地磚格子中的位置和大小來確定的,以確保在角色移動(dòng)過程中,它們始終被正確的地圖元素所擋住,從而實(shí)現(xiàn)正確的遮擋效果。二、基于物體位置和體積的排序處理
拓?fù)渑判颍涸谶@種方式中,系統(tǒng)會(huì)根據(jù)場(chǎng)景中物體的位置和體積來計(jì)算出它們之間的前后順序。這通常涉及到對(duì)場(chǎng)景中的所有物體進(jìn)行拓?fù)渑判颍源_定它們的繪制順序。優(yōu)化方式:由于物體數(shù)量較多時(shí),排序開銷會(huì)很大,因此需要使用一些優(yōu)化方式來降低開銷。可以使用空間分割技術(shù)(如四叉樹或八叉樹)來將場(chǎng)景劃分為更小的區(qū)域,并在每個(gè)區(qū)域內(nèi)進(jìn)行局部排序,以減少全局排序的開銷。這兩種方式各有優(yōu)缺點(diǎn),具體選擇哪種方式取決于游戲的具體需求、性能要求以及開發(fā)團(tuán)隊(duì)的偏好。在實(shí)際開發(fā)中,可能還需要根據(jù)具體情況對(duì)這兩種方式進(jìn)行適當(dāng)?shù)恼{(diào)整和優(yōu)化。
三、制作2D游戲,畫美術(shù)時(shí),一個(gè)人物要畫幾個(gè)視角
斜視角圖象的處理,在程序設(shè)計(jì)上的一大難點(diǎn)在于它的世界中坐標(biāo)反映在2D屏幕上需要做一些變換. Isometric Tile游戲中的 X軸一般是從左上指向右下,沿 35度角左右的方向(如果是 45度視角的話),每個(gè) Tile的底面在屏幕上看起來就象菱形,整個(gè) Tile是一個(gè)六面體(見右圖). x軸和 y軸成 90度.這是個(gè)不錯(cuò)的角度,但在設(shè)計(jì) Isometric Tile的時(shí)候,更好的角度是 26度(arc tan 0.5),對(duì)應(yīng)的視角是 30度.看起來更扁一些, 32:15的 Tile設(shè)計(jì)隨處可見(如左圖),因?yàn)?32對(duì)計(jì)算機(jī)處理來說可是個(gè)很方便的數(shù)值.(所謂視角,這里指視線和水平面的夾角,特別的,游戲中大多采用的都是俯視的視角,如果你需要將坐標(biāo)軸同水平線的角度轉(zhuǎn)換為視角,可以將其取 tg,再來次 arc sin)在 Isometric Tile Engine的設(shè)計(jì)中,使用什么角度的視角并不重要,程序代碼基本相同,只對(duì)于美工是不同的.但是經(jīng)過這幾天的思考,我發(fā)現(xiàn)斜視角(非 Tile)的引擎設(shè)計(jì)中如果能采用比較合適的角度,引擎的速度將有很大的提高,這個(gè)最合適的角度就是 37度(arc tan 0.75)視角大約 48度.在這個(gè)角度下,游戲中的 X, Y軸,和屏幕上 X,Y軸的轉(zhuǎn)換關(guān)系正好為勾三股四弦五的關(guān)系,這在我們需要的大量坐標(biāo)轉(zhuǎn)換的工作中提供了加速運(yùn)算的可能;-)游戲中的 X軸上一個(gè)單位,相當(dāng)于屏幕 X的 0.8個(gè)單位, Y的 0.6個(gè)單位的變化.游戲中的 Y軸上一個(gè)單位,相當(dāng)于屏幕 X的-0.8個(gè)單位, Y的 0.6個(gè)單位的變化.就是說我們的 Sprite在游戲中移動(dòng) aX+bY,在屏幕上就移動(dòng)了 0.8(a-b)X+0.6(a+b)Y
現(xiàn)在讓我們來看看屏幕,假如我們選擇 640x480的分辨率. Aha, 640:480=4:3就有這么好的事;)那么在游戲坐標(biāo)系中的一條水平線正好是屏幕的對(duì)角線,這使得判斷游戲世界中的一個(gè)坐標(biāo)點(diǎn)是否在屏幕區(qū)域內(nèi)變的很簡單;-)請(qǐng)看左圖,外菱形框是游戲世界中的一矩形部分,中間的矩形框表示屏幕區(qū)域.我們的屏幕坐標(biāo)從左上角的(0,0)到右下角的(639,479)為了好說明問題,將游戲世界的坐標(biāo)原點(diǎn)也定在屏幕的左上角, ok,現(xiàn)在來算一下屏幕四個(gè)角對(duì)應(yīng)的游戲世界的坐標(biāo).由于屏幕對(duì)角線長 800,那么右上角的坐標(biāo)是(400,-400);左下角是(400,400);右下角是(800,0).決定一個(gè)點(diǎn)是否在屏幕內(nèi)的根據(jù)是 0≤X+Y≤800,就這么簡單.
最后談?wù)勔嬖O(shè)計(jì)時(shí)的優(yōu)化,我們?cè)谧鴺?biāo)變換時(shí),使用最多的運(yùn)算是除5.而除法指令是最慢的,有沒有辦法優(yōu)化呢?針對(duì)我們的作用數(shù)值并不是很大的情況這個(gè)運(yùn)算可以達(dá)到最快的速度.即用*205/1024代替/5而 205=(1+5*8)*5, 386以上的 CPU計(jì)算*5*8等都可以利用 LEA指令,非常的快.右移 10位就可以代替/1024,這個(gè)不用我多說了吧;-)當(dāng)然現(xiàn)在的 C語言編譯器將優(yōu)化選項(xiàng)開到最大時(shí),會(huì)自動(dòng)幫你做優(yōu)化,不用你寫內(nèi)嵌匯編的.如果實(shí)在是想自己寫,大概是這么幾行:
mov edx,eax; eax里是被除數(shù) a lea eax,[edx+4*edx]; eax= 5*a lea eax,[edx+8*eax]; eax= a+8*eax= 41*a lea eax,[eax+4*eax]; eax= 5*eax= 205*a sar eax,10; eax= 205*a/1024注意:如果用 C語言寫,最好寫將/1024直接寫成>>10,雖然/1024會(huì)被優(yōu)化成右移操作,但除法是有四舍五入的,所以編譯器在優(yōu)化時(shí),將多考慮些東西,而多幾條指令.
擔(dān)心計(jì)算的精度嗎?大可不必, 205/1024=0.200195就是說,一個(gè)點(diǎn)有 0.000195的誤差,這樣,即使積累到 800個(gè)點(diǎn)(屏幕的對(duì)角線,就是最長的線啦)也才 0.17點(diǎn)的誤差,而屏幕上的坐標(biāo)是整數(shù)的,所以沒有影響.你可以很容易的驗(yàn)證,就算使用 1280x1024的分辨率也是沒有問題.


