我還是SpriteKit的新手,並且想知道是否可以使用Xcode的SKS編輯器構建一個關卡。當我用「Spaceship.png」紋理添加了幾個精靈並構建了模板應用程序時,紋理不會加載。SpriteKit unarchiveFromFile不會從資產目錄和圖集加載紋理
下面是使用Swift作爲語言的vanilla OSX Game模板截圖,並添加了一個提供的「Spaceship.png」精靈。紋理顯示精細: 而這裏的建築的結果,與只修改模板運行的應用程序:
調試控制檯顯示此警告消息: 我試圖添加一個.atlas文件夾,並得到相同的結果。場景只顯示紅色的X圖標來代替精靈。如果添加的精靈只是顏色精靈,他們顯示很好。我前段時間有一個應用程序,報廢,我曾經加載SKScene,並手動將精靈資源添加到我的SKScene子類中,它運行良好。
但是,如果我將紋理(例如「Spaceship.png」)作爲示例移動到項目的根目錄,即不在資產目錄或.atlas文件夾內,則場景加載的紋理顯示正常。
這裏的紋理添加到項目的根目錄:
這是期望的結果: 我試圖手動從SKS文件通過添加加載的資產到現場enumerateChildNodesWithName(_,usingBlock)
,如果紋理不在項目文件夾的根目錄下,我會得到相同的結果。
這是我嘗試手動添加的資產:
func applicationDidFinishLaunching(aNotification: NSNotification) {
/* Pick a size for the scene */
if let scene = GameScene.unarchiveFromFile("GameScene") as? GameScene {
let sceneToBePresented = GameScene()
/* Set the scale mode to scale to fit the window */
sceneToBePresented.scaleMode = .AspectFill
sceneToBePresented.size = scene.size
/* Sprite Kit applies additional optimizations to improve rendering performance */
self.skView!.ignoresSiblingOrder = true
self.skView!.showsFPS = true
self.skView!.showsNodeCount = true
scene.enumerateChildNodesWithName("*") { node, stop in
sceneToBePresented.addChild(node.copy() as SKSpriteNode)
}
self.skView!.presentScene(sceneToBePresented)
}
}
我環顧四周SpriteKit類 - SKNode
,SKScene
,SKTexture
,SKSPriteNode
- 關於路徑,高速緩存,預壓,或任何任何線索,但無法找到可以使這項工作的事情。
我正在運行Xcode 6.1.1,我的目標是10.9,而我使用的語言是Swift,儘管使用ObjC時同樣的行爲也是如此。這是一個功能還是錯誤?其他人跑步/遇到類似的情況?從資產目錄加載紋理 - -
預先感謝任何幫助
[更新]
看起來這是尚未實現,因爲這帖子在開發論壇討論了同樣的問題,他的解決方案將資產目錄重命名爲與紋理相同的名稱。從本質上講,我發現有關在根文件夾中有圖像文件:How do you load sprite textures from Images.xcassets when using SKS scene file,雖然我設法回滾到工作狀態的早期應用程序確實從.atlas'es加載紋理,但我似乎無法做一個乾淨的模板!
你嘗試做一個乾淨的再建? 我在場景編輯器中遇到了很多問題。我真的很想將它用於我的遊戲開發,但它的功能太多,並且不完整。 – 2015-02-06 07:11:15
我做到了。我甚至從頭開始創建一個新的乾淨模板,如上所示。我做的唯一修改是向'GameScene.sks'文件添加紋理精靈。有一件事很奇怪,不過,同樣模板的iOS版本可以正常工作,沒有'SKTexture'警告。所以,我開始認爲這可能是一個OSX目標問題。儘管如此,它可以在iOS 7.0的情況下正常工作。此外,它在我拙劣的應用程序中工作過,因爲我從SKS文件加載精靈資源並將它們手動添加到我的場景中,沒有任何問題。 – 2015-02-06 08:09:27