Frage

Ich habe einen benutzerdefinierten Knoten mit einem überschriebenen XScale-Setter.Z.B.:

-(void)setXScale:(CGFloat)xScale
{
    [super setXScale:xScale];
    NSLog(@"Scale changed to: %f", xScale);
}

Wenn ich die XScale-Eigenschaft manuell einstelle, kann ich sehen, dass der Setter ausgelöst wird.

Wenn ich den Knoten jedoch über eine Aktion skaliere, z.:

[myCustomNode runAction:[SKAction scaleXTo:2.0f duration:0.5f]];

obwohl der Knoten korrekt skaliert wird, wird der Setter nie aufgerufen.

Weiß jemand warum nicht?Wie ändert die SKScale-Aktion die Skalierung des Knotens?

War es hilfreich?

Lösung

Intern verwendet Sprite Kit eine C ++ - Render-Engine.Meine Beobachtung ist, dass SKAction die Objective-C-Ebene vollständig umgeht und stattdessen Eigenschaften direkt in den C ++ - Klassen ändert.Wahrscheinlich die Leistung von Aktionen zu verbessern.

Wenn Sie solche Änderungen beobachten möchten, verwenden Sie eine customActionWithDuration:actionBlock: aktion, die die Eigenschaft des Knotens über den Block festlegt.Sie können den Knoten auch in Unterklassen unterteilen, eine previousScale-Eigenschaft hinzufügen und regelmäßig überprüfen, ob sich die ursprüngliche Skalierung geändert hat, indem Sie sie mit der previousScale-Eigenschaft vergleichen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top