2013/09/17

深入談一談物件的『深度』

   Game Maker是一種2.5D的遊戲引擎。所謂2.5D是在2D之外,加上可以設定各點的上下層次,因此有『前後』或是『深淺』的感覺。


  為了營造前述的感覺,最簡單的作法是運用『畫家演算法』(painter's algorithm),遠的先畫,由遠而近全都畫完之後,近的物件自然浮在最上面。在Game Maker中,便是由『深度』depth這個參數來設定。
  depth所決定的,主要是物件執行其事件處理程式的相對順序。在Gamer Maker中,各物件依事件的成立與否而執行其處理程序。事件種類決定主要的執行群組,而同一事件中,各物件彼此相對的執行次序則由各自的depth比較決定。
  在3D的呈現中,由於鏡頭的設定,物件的遠近是由它和鏡頭的遠近來決定(技術上稱之為z-buffer),因此,{{{d3d_set_hidden(true)}}}這個指令便可開啟此一功能。至於depth所決定的繪圖次序(也就是繪圖事件執行的次序)並不重要,但仍具有相當的實用性。例如,鏡頭的切換必須牽涉到一堆參數,因此,可以利用深度進行規劃,讓相同的動作可以群組在一起,鏡頭的切換次數便可減少。在我們Doom程式碼中,正的depth物件要用『透視投影』,鏡頭在god物件中設定一次即可。而負的depth的物件要用『正射投影』(例如,第一人稱的手、hud、提示訊息、小地圖等等),鏡頭也是由負得最少的物件設定一次即可。