2016-11-02 18 views
1

Evrything工作正常,直到我試圖將我的資產(精靈表)放入iOS框架中。我正在使用Swift 3.0無法在iOS框架中找到紋理圖集

爲了減輕我的Xcode項目,我決定把我的資產:TexturePacker生成的精靈圖表放在一個框架中。當它們包含在主項目中時,作爲內部資源,一切工作正常。但是當我將我的圖集放在一個框架中時,代碼編譯得很好,沒有錯誤,應用程序在物理設備(iPad)上運行良好,但我有一個紅色十字,而不是我的精靈。我從控制檯收到以下錯誤消息:

2016-11-02 15:35:02.166測試拼圖[310:42458]無法找到Texture Atlas'Statiques'。 2016-11-02 15:35:02.392測試難題[310:42458] Texture Atlas'Puzzle0'找不到。 2016-11-02 15:35:02.393測試拼圖[310:42458]無法找到Texture Atlas'Puzzle1'。

等等等等(直到41)

我已經把公共關鍵字我的課,所有從主體工程調用的函數之前。下面是一個例子...

import SpriteKit 


public class Statiques { 

public init() { 

} 

// sprite names 
let DANCING1 = "Dancing1" 
let DANCING2 = "Dancing2" 
let PUZZLE0 = "Puzzle0" 
let PUZZLE1 = "Puzzle1" 
let PUZZLE10 = "Puzzle10" 
let PUZZLE11 = "Puzzle11" 
let PUZZLE12 = "Puzzle12" 
let PUZZLE13 = "Puzzle13" 
let PUZZLE14 = "Puzzle14" 
let PUZZLE15 = "Puzzle15" 
let PUZZLE16 = "Puzzle16" 
let PUZZLE17 = "Puzzle17" 
let PUZZLE18 = "Puzzle18" 
let PUZZLE19 = "Puzzle19" 
let PUZZLE2 = "Puzzle2" 
let PUZZLE20 = "Puzzle20" 
let PUZZLE21 = "Puzzle21" 
let PUZZLE22 = "Puzzle22" 
let PUZZLE23 = "Puzzle23" 
let PUZZLE24 = "Puzzle24" 
let PUZZLE25 = "Puzzle25" 
let PUZZLE26 = "Puzzle26" 
let PUZZLE27 = "Puzzle27" 
let PUZZLE28 = "Puzzle28" 
let PUZZLE29 = "Puzzle29" 
let PUZZLE3 = "Puzzle3" 
let PUZZLE30 = "Puzzle30" 
let PUZZLE31 = "Puzzle31" 
let PUZZLE32 = "Puzzle32" 
let PUZZLE33 = "Puzzle33" 
let PUZZLE34 = "Puzzle34" 
let PUZZLE35 = "Puzzle35" 
let PUZZLE36 = "Puzzle36" 
let PUZZLE37 = "Puzzle37" 
let PUZZLE38 = "Puzzle38" 
let PUZZLE39 = "Puzzle39" 
let PUZZLE4 = "Puzzle4" 
let PUZZLE40 = "Puzzle40" 
let PUZZLE41 = "Puzzle41" 
let PUZZLE5 = "Puzzle5" 
let PUZZLE6 = "Puzzle6" 
let PUZZLE7 = "Puzzle7" 
let PUZZLE8 = "Puzzle8" 
let PUZZLE9 = "Puzzle9" 


// load texture atlas 
let textureAtlas = SKTextureAtlas(named: "Statiques") 


// individual texture objects 
public func Dancing1() -> SKTexture { return textureAtlas.textureNamed(DANCING1) } 
public func Dancing2() -> SKTexture { return textureAtlas.textureNamed(DANCING2) } 
public func Puzzle0() -> SKTexture { return textureAtlas.textureNamed(PUZZLE0) } 
public func Puzzle1() -> SKTexture { return textureAtlas.textureNamed(PUZZLE1) } 
public func Puzzle10() -> SKTexture { return textureAtlas.textureNamed(PUZZLE10) } 
public func Puzzle11() -> SKTexture { return textureAtlas.textureNamed(PUZZLE11) } 
public func Puzzle12() -> SKTexture { return textureAtlas.textureNamed(PUZZLE12) } 
public func Puzzle13() -> SKTexture { return textureAtlas.textureNamed(PUZZLE13) } 
public func Puzzle14() -> SKTexture { return textureAtlas.textureNamed(PUZZLE14) } 
public func Puzzle15() -> SKTexture { return textureAtlas.textureNamed(PUZZLE15) } 
public func Puzzle16() -> SKTexture { return textureAtlas.textureNamed(PUZZLE16) } 
public func Puzzle17() -> SKTexture { return textureAtlas.textureNamed(PUZZLE17) } 
public func Puzzle18() -> SKTexture { return textureAtlas.textureNamed(PUZZLE18) } 
public func Puzzle19() -> SKTexture { return textureAtlas.textureNamed(PUZZLE19) } 
public func Puzzle2() -> SKTexture { return textureAtlas.textureNamed(PUZZLE2) } 
public func Puzzle20() -> SKTexture { return textureAtlas.textureNamed(PUZZLE20) } 
public func Puzzle21() -> SKTexture { return textureAtlas.textureNamed(PUZZLE21) } 
public func Puzzle22() -> SKTexture { return textureAtlas.textureNamed(PUZZLE22) } 
public func Puzzle23() -> SKTexture { return textureAtlas.textureNamed(PUZZLE23) } 
public func Puzzle24() -> SKTexture { return textureAtlas.textureNamed(PUZZLE24) } 
public func Puzzle25() -> SKTexture { return textureAtlas.textureNamed(PUZZLE25) } 
public func Puzzle26() -> SKTexture { return textureAtlas.textureNamed(PUZZLE26) } 
public func Puzzle27() -> SKTexture { return textureAtlas.textureNamed(PUZZLE27) } 
public func Puzzle28() -> SKTexture { return textureAtlas.textureNamed(PUZZLE28) } 
public func Puzzle29() -> SKTexture { return textureAtlas.textureNamed(PUZZLE29) } 
public func Puzzle3() -> SKTexture { return textureAtlas.textureNamed(PUZZLE3) } 
public func Puzzle30() -> SKTexture { return textureAtlas.textureNamed(PUZZLE30) } 
public func Puzzle31() -> SKTexture { return textureAtlas.textureNamed(PUZZLE31) } 
public func Puzzle32() -> SKTexture { return textureAtlas.textureNamed(PUZZLE32) } 
public func Puzzle33() -> SKTexture { return textureAtlas.textureNamed(PUZZLE33) } 
public func Puzzle34() -> SKTexture { return textureAtlas.textureNamed(PUZZLE34) } 
public func Puzzle35() -> SKTexture { return textureAtlas.textureNamed(PUZZLE35) } 
public func Puzzle36() -> SKTexture { return textureAtlas.textureNamed(PUZZLE36) } 
public func Puzzle37() -> SKTexture { return textureAtlas.textureNamed(PUZZLE37) } 
public func Puzzle38() -> SKTexture { return textureAtlas.textureNamed(PUZZLE38) } 
public func Puzzle39() -> SKTexture { return textureAtlas.textureNamed(PUZZLE39) } 
public func Puzzle4() -> SKTexture { return textureAtlas.textureNamed(PUZZLE4) } 
public func Puzzle40() -> SKTexture { return textureAtlas.textureNamed(PUZZLE40) } 
public func Puzzle41() -> SKTexture { return textureAtlas.textureNamed(PUZZLE41) } 
public func Puzzle5() -> SKTexture { return textureAtlas.textureNamed(PUZZLE5) } 
public func Puzzle6() -> SKTexture { return textureAtlas.textureNamed(PUZZLE6) } 
public func Puzzle7() -> SKTexture { return textureAtlas.textureNamed(PUZZLE7) } 
public func Puzzle8() -> SKTexture { return textureAtlas.textureNamed(PUZZLE8) } 
public func Puzzle9() -> SKTexture { return textureAtlas.textureNamed(PUZZLE9) } 


// texture arrays for animations 
public func Dancing() -> [SKTexture] { 
    return [ 
     Dancing1(), 
     Dancing2() 
    ] 
} 

public func Puzzle() -> [SKTexture] { 
    return [ 
     Puzzle0(), 
     Puzzle1(), 
     Puzzle2(), 
     Puzzle3(), 
     Puzzle4(), 
     Puzzle5(), 
     Puzzle6(), 
     Puzzle7(), 
     Puzzle8(), 
     Puzzle9(), 
     Puzzle10(), 
     Puzzle11(), 
     Puzzle12(), 
     Puzzle13(), 
     Puzzle14(), 
     Puzzle15(), 
     Puzzle16(), 
     Puzzle17(), 
     Puzzle18(), 
     Puzzle19(), 
     Puzzle20(), 
     Puzzle21(), 
     Puzzle22(), 
     Puzzle23(), 
     Puzzle24(), 
     Puzzle25(), 
     Puzzle26(), 
     Puzzle27(), 
     Puzzle28(), 
     Puzzle29(), 
     Puzzle30(), 
     Puzzle31(), 
     Puzzle32(), 
     Puzzle33(), 
     Puzzle34(), 
     Puzzle35(), 
     Puzzle36(), 
     Puzzle37(), 
     Puzzle38(), 
     Puzzle39(), 
     Puzzle40(), 
     Puzzle41() 
    ] 
} 


} 

從我的主要的應用程序,我所說的框架與此代碼:

import Foundation 
import SpriteKit 
import AVFoundation 
import Framework_Dancing 


class GameScene1: GameScene { 

// not useful code for this problem is missing here... 

let sheet = Statiques() 

let sprite_dancing1 = SKPuzzleAnim(texture: sheet.Dancing1()) 
let sprite_dancing2 = SKPuzzleAnim(texture: sheet.Dancing2()) 

我的框架是130 MB,至極讓我想到的資產包括正確內它,我沒有從編譯器中得到任何錯誤,我錯過了什麼框架?只要我把資產放到主項目中,沒有框架,一切都可以。

所有的地圖集都是由TexturePacker生成的。

這裏是我的Xcode項目的屏幕拷貝從框架代碼:

Screen copy

感謝您的幫助,

皮埃爾

回答

0

下面是我從TexturePacker的創造者得到的回答是:

「據我所知SKTextureAtlas構造總是搜索主應用程序的圖譜文件,即使它是在框架代碼中調用,我不知道這是一個錯誤還是一個功能,你不得不問蘋果。對不起,但我不能幫你解決這個問題: -/ 最好的問候, 約阿希姆「

0

我相信你得到的錯誤,因爲您正在尋找主項目中的資產,而不是在框架項目中。

例如,如果你想顯示存儲在一個框架中的UIImage這就是你必須寫這

let image = UIImage(named: "SomeImage", in: Bundle(identifier: "FrameworkBundleID"), compatibleWith: nil) 

你可以閱讀更多關於此這裏

cocoa touch framework assets not visible in App Project

的問題是SKNode/SKSpriteNode等沒有類似的初始化程序,所以我不確定它會起作用。

希望這有助於

+0

謝謝,問題可能是因爲我已經創建了框架作爲我的主要應用程序的子項目和不是一個獨立的,我會試試這種方式。根據我的測試,來自框架的swift文件顯然沒有看到這個框架內的atlasc數據。 – PGibouin

+0

對子項目方式沒有把握。 – crashoverride777