2012-06-21 28 views
1

讓我來簡單介紹一下我們的設置。如何使用CCSpriteBatchNode並仍然使用本地座標?

有一個世界。
在世界上,有很多地方。
在地方,有很多字符。
現在很多角色共享相同的紋理。

我們目前有
world(layer)-batchNode-character sprite。 world(layer)-batchNode-place sprite

因此角色的位置是相對於世界而不是它在(概念上)的地方。

我們如何能夠建立的類層次結構,使
我們仍然利用batchNode
的功率,並能夠使用本地座標字符(相對於放置在)

簡單的結構,如
world(layer)-place(layer)-batchNode-character(sprite)將不起作用,因爲世界中會有許多共同字符,但不共享batchNode。

回答

2

首先,你不需要(多個)圖層。您可以讓批處理節點代替圖層。您可能希望有一個用於用戶輸入的主層,或者通過使用觸摸分派器註冊觸摸委託類來自行管理用戶輸入。

概念是什麼,我會建議該節點層級是:

scene (touch delegate) 
    batchNode (places) 
    batchNode (characters) 

scene 
    layer (input) 
    batchNode (places) 
    batchNode (characters) 

現在假設你的地方(?平鋪圖像)莫名其妙地分散在世界各地,他們每個人都有一個位置。要讓每個地方的角色具有相對於他們所在位置的座標,您可以執行以下兩項操作之一:

  1. 將字符batchnode的位置設置爲相應位置的位置。如果您只在該位置批量處理字符,這將起作用。
  2. 如果要批處理所有相同的字符而不考慮位置,可以將「虛擬」CCSprites(使用一個小而完全透明的圖像)添加到批處理節點,並將它們分別放置在特定位置。然後添加這個地方的角色作爲這個角色的子女。如果角色從一個地方移動到另一個地方,請將其從一個虛擬精靈中移除並將它們添加到相應的其他虛擬精靈中。

最後,你總是可以創建一個變換精靈的位置,根據他們在,只有這樣,你不需要任何專門設置節點層次的地方局部座標的輔助方法,你仍然可以正常工作在必要時使用本地座標。如果你這樣做,你可能會發現,無論你使用本地座標還是世界座標,都沒有太大區別。世界座標只是字符位置加上地點位置,一個簡單的加/減操作可以讓你從世界到本地座標,反之亦然。

相關問題