2014-04-05 26 views
6

Wenn Sie in SpriteKit ein Bild mit der Methode [SKTexture textureWithImageNamed:] laden, durchsucht es zuerst Ihre Bundles und dann die Atlanten, wenn es Ihre Textur nicht findet. Es wird dann ein Platzhalterbild erstellt und geladen.Wie kann ich herausfinden, ob ein SKTexture das Platzhalterbild ist?

Gibt es eine Möglichkeit herauszufinden (ohne visuelle Überprüfung), ob das geladene Bild ein Platzhalter ist?

Dies scheint nicht ein sehr "Kakao" Weg, um diese Art von Fehler zu behandeln.

developer.apple.com ist jetzt down, also dachte ich, ich würde diese Frage SO stellen.

+0

Ja, Verwendung SpriteKit-Produktinfo von Github, dann können Sie private Vars der Textur sehen. Es gibt einen Ivar, der auf die ursprüngliche Textur (Atlas) zeigt, wenn die Textur eine Atlas-Textur ist. – LearnCocos2D

+0

Auch die MissingResource.png ist 128x128 - Sie können die Texturgröße vergleichen, wenn Sie selbst keine Texturen dieser Größe verwenden. – LearnCocos2D

+0

Haben Sie jemals einen guten Weg gefunden? Ich lade Texturen vor und einen von dreißig Starts. Ich erhalte den Fehler beim Laden der Bildressource für 3 oder 4 Texturen. Ich habe versucht, einen Weg zu finden, um herauszufinden, mit Code, wenn dies passiert und dann neu zu laden, wenn es passiert. – Brad

Antwort

1

SKTexture hat einige private Eigenschaften, die hilfreich sein würde (siehe zB https://github.com/luisobo/Xcode-RuntimeHeaders/blob/master/SpriteKit/SKTexture.h), aber in Swift und während der Entwicklung ich dies mit:

extension SKTexture { 
    public var isPlaceholderTexture:Bool { 
     if size() != CGSize(width: 128, height: 128) { 
      return false 
     } 

     return String(describing: self).contains("'MissingResource.png'") 
    } 
} 

Achtung!:

Dies funktioniert nur, wenn Sie mit einem SKTextureAtlas:

let t1 = SKTextureAtlas(named: "MySprites").textureNamed("NonExistingFoo") 
// t1.isPlaceholderTexture == true 

let t2 = SKTexture(imageNamed: "NonExistingBar") 
// t2.isPlaceholderTexture == false 
+0

Diese Frage ist ein bisschen alt, aber ich werde diese akzeptieren. – Weston

2

Sie können überprüfen, ob der Atlas das Bild enthält. Ich habe die folgende Methode in meinem AtlasHelper:

+(BOOL) isTextureWithName:(NSString *) name existsInAtlas:(NSString *)atlasName 
{ 
    SKTextureAtlas *atlas = [SKTextureAtlas atlasNamed:atlasName]; 
    return [atlas.textureNames containsObject:name]; 
} 
Verwandte Themen