2016-07-06 45 views
3

我在SpriteKit中編寫了一個遊戲,並且正在編寫一個從文本文件中加載「級別」的部分,在文本文件中的每個標記爲「x」的位置放置一個牆節點。但是,如果我知道會有很多節點,並且它們都是從同一個「wall.png」文件加載的,那麼一次加載圖像然後在每次需要時複製對象效率更高,或每次只加載圖像?SpriteKit來自同一圖像的許多節點:單獨加載還是重複加載?

for line in lines { 
    for letter in line { 
    if letter == "x" { 
     let wall = SKSpriteNode(imageNamed: "wall") 
     self.addChild(wall) 
    } else { ... } 
    } 
} 

VS

let wall = SKSpriteNode(imageNamed: "wall") 
for line in lines { 
    for letter in line { 
    if letter == "x" { 
     self.addChild(wall.copy()) 
    } else { ... } 
    } 
} 

在此範圍內self是抱着擴展SKNode水平的一類,所以我將牆壁self,然後補充說SKNode現場。

+0

嘗試兩種方法並計算在iOS獲得低存儲量警告之前可以添加的數量。 – vacawama

+0

我在考慮加載速度有多快,我認爲一旦加載後兩者都會有相似的內存使用情況? – jaxuru

+0

我覺得差不多,代碼的複雜度是2^n循環,行self.addChild(wall.copy())或讓wall = SKSpriteNode(imageNamed:「wall」)不會增加更多時間。您可以嘗試在循環和檢查的開始和結束時添加增量時間。 –

回答

1

要回答你的問題,而不訴諸第三方支持

轉到與第二個選項(複製選項)

這將在多個精靈中使用相同的紋理,其中第一個選擇在每次迭代中創建一個新紋理。

+0

謝謝!如果我製作了一個紋理,並在一堆SKSpriteNodes的初始化器中使用了該紋理,那麼該紋理會被引用還是被複制? – jaxuru

+0

引用,如果你使用紋理地圖集。它也將被引用到處 – Knight0fDragon

0

開發你的項目的方法記得我瓷磚地圖。請注意,因爲您可以花費大量時間來加載每個元素,您可以準備好關卡並獲得更多樂趣。

有數千個教程可以幫助您使用Sprite-Kit和Swift構建TileMap。他們中許多人都使用這個GitHub的庫還稱爲JSTileMaphere

在這些教程你可以學習到如何:

  • 與瓷磚
  • 創建地圖的地圖添加到遊戲
  • 滾動地圖以關注玩家

  • 使用對象圖層。

這很簡單,比如你可以加載tmx地圖:

let tiledMap = JSTileMap("mapFileName.tmx") //map name 
if t = tileMap { 
    self.addChild(tiledMap) 
}