Pourquoi [SKAction scaleXTo :durée :] ne pas appeler le setter xScale ?
-
21-12-2019 - |
Question
J'ai un nœud personnalisé qui a un setter xScale remplacé.Par exemple.:
-(void)setXScale:(CGFloat)xScale
{
[super setXScale:xScale];
NSLog(@"Scale changed to: %f", xScale);
}
Si je définis la propriété xScale manuellement, je peux voir le setter se déclencher.
Cependant, si je fais évoluer le nœud via une action, par exemple :
[myCustomNode runAction:[SKAction scaleXTo:2.0f duration:0.5f]];
alors même si le nœud est correctement mis à l'échelle, le setter n'est jamais invoqué.
Est-ce que quelqu'un sait pourquoi pas ?Comment l'action SKScale modifie-t-elle l'échelle du nœud ?
La solution
En interne, Sprite Kit utilise un moteur de rendu C++.Mon observation est que SKAction contourne complètement la couche Objective-C et modifiera les propriétés directement sur les classes C++.Susceptible d’améliorer la performance des actions.
Si vous souhaitez observer de tels changements, utilisez un customActionWithDuration:actionBlock:
action qui définit la propriété du nœud via le bloc.Vous pouvez également sous-classer le nœud, ajouter une propriété previousScale et vérifier périodiquement si l'échelle d'origine a changé en la comparant avec la propriété previousScale.