Warum funktioniert [SKAction scaleXTo:dauer:] den XScale-Setter nicht aufrufen?
-
21-12-2019 - |
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?
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.