2010-04-13 33 views
0

我真的不明白我想渲染側面滾動的方式嗎?當我的角色移動時,我怎麼知道要渲染什麼?我應該爲角色使用什麼樣的定位? 我希望我的問題很清楚如何渲染2D側面滾輪遊戲

+0

我正在做一個類似的項目,嘿。 – Warty 2010-04-13 04:00:02

+0

你能解釋一下「側面卷軸」是什麼意思嗎? – ysap 2010-04-13 04:06:54

+3

「側面卷軸」通常是指某種類型的視頻遊戲。想象一下2d環境的2d視口。視口只能向左/向右滑動。維基百科說:http://en.wikipedia.org/wiki/Side-scrolling_video_game – Ponkadoodle 2010-04-13 04:10:13

回答

1

我發現最簡單的方法是使用characterX和characterY變量[integer或float,無論你想要什麼]然後有一個cameraX和cameraY變量。場景中的每個對象被繪製在theObjectX-cameraX,theObjectY-cameraY ...

CameraX/CameraY通過類似至中點公式補間所以最終他們將達到PlayerX的/ playery [Cx = (Cx*99+Px)/100] ...是啊

通過這樣做,每個對象在舞臺的空間移動,變換隻在渲染[頭痛節省你]

0
  • 使用矩陣來定義相機參照系。
  • 使用空間分區將您的級別拆分爲屏幕/窗口。

把你的玩家精靈想象成任何其他實體,就像敵人和交互對象一樣。 現在你想要的是相機的抽象。您可以使用此佈局將相機定義爲3x3矩陣:

[rotX_X, rotY_X, 0] 
[rotX_Y, rotY_Y, 0] 
[transX, transY, 1] 

左上角的2x2子矩陣是旋轉矩陣。 transX和transY定義了翻譯部分,即起源。你也可以免費擴展。只需簡單地用標量縮放旋轉部分,然後您就可以進行縮放。

爲了正確地使用旋轉,你的精靈需要是多邊形/基元,比如說三角形或四邊形;繪製時不能將矩陣應用於精靈的位置。如果你不需要旋轉,只需轉換中心點就可以正常工作。 如果您想讓相機跟隨播放器,請將播放器的位置作爲相機原點。那是翻譯矢量[transX,transY] 那麼如何將矩陣應用於實體位置和模型頂點?你做一個向量矩陣乘法。其中v'是新的矢量,v是舊的矢量,M^-1是矩陣的逆。相機需要是一個逆變換,因爲它定義了一個局部座標系。一個比喻可能是:如果你在我面前,我從我的參考框架左轉,我正在轉向右邊。這適用於所有仿射和線性變換,如縮放,旋轉和平移。

將你的關卡分成幾個子部分,這樣你可以挑選出不需要渲染的物體和景物。您的視口具有一定的大小/分辨率。只渲染與您的視口相交的風景和實體。不是根據視口邊界檢查每個實體,而是將每個實體分配到某個子屏幕,並根據視口和相機邊界測試子屏幕的邊界。如果你把你的水平到部分,它們的大小與視口一樣的,那麼在任何特定時間可見 屏幕的最大數量爲:

  • 2,如果你的相機只左右滾動。
  • 4如果相機向左,向右,向上和向下滾動。
  • 4如果您的相機以任何方向滾動,並且還可以旋轉。

畫面切換是一個事件,您可以使用它來激活屬於該畫面的實體。這可能是敵人,背景動畫,門或任何你喜歡的東西。

+0

我可能在出生之前玩過我的第一個側面卷軸,我敢肯定你不知道側面卷軸的定義是什麼: http://en.wikipedia.org/wiki/Side-scrolling_video_game我實際上*在Amiga側面滾輪上工作*,並且我可以告訴你旋轉整個屏幕並放大和縮小是**不** **側面滾輪是什麼;) – SyntaxT3rr0r 2010-04-15 19:52:20

0

如果這是您第一次涉足寫一個側面滾輪,我建議使用已經存在的遊戲引擎(如ConstructGamemakerXNA或任何適合您的經驗等級)考慮,這樣你就不必擔心關於以什麼順序渲染事物以及如何使其全部工作。搗亂一下 - 可能探索其中的一些 - 去感受他們如何做事,然後一旦習慣它就冒險出現在你自己的身上。 不是說受火洗禮有什麼不妥,但在我看來,它可以變得非常強大。