Сделать SKAction с помощью селектора выполнения, НО с параметрами
Я хочу создать стену, которая увеличивает размер. Но когда я увеличиваю размер, физическое тело не следует (оно сохраняет тот же размер). Так что у меня есть идея, что SKAction, который повторяется навсегда, выполняет селектор, который изменяет размеры моего физического тела в зависимости от размера объекта.
Поэтому я хотел сделать код вроде:
-(void) sizeChange:(SKSpriteNode *)sprite{
sprite.physicsbody = [SKPhysicsBody bodyWithRectangleOfSize: sprite.size];
}
Теперь я хочу запустить SKAction, который выполняет селектор с этим. Итак, я написал это:
SKAction *perform = [SKAction performSelector:@selector(sizeChange:) withObject: sprite onTarget: self];
[self runAction:[SKAction repeatActionForever:perform]];
SKAction не работает с "WithObject". Как добавить параметр в SKAction executeSelector? Спасибо!
РЕДАКТИРОВАТЬ:
По сути, я хочу эквивалентность SKAction:
[self performSelector:@selector(sizeChange:) withObject:sprite];
Или способ повторить код, прежде чем навсегда. Благодарю вас!
2 ответа
Проверять, выписываться customActionWithDuration:actionBlock:
метод SKAction
это создает действие, которое выполняет блок в течение продолжительности. Вы можете указать свой код в блоке действий.
+ (SKAction *)customActionWithDuration:(NSTimeInterval)seconds
actionBlock:(void (^)(SKNode *node,
CGFloat elapsedTime))block
Кроме того, вы также можете использовать runBlock:
метод.
SKAction* blockAction = [SKAction runBlock:^
{
// your code here
}];
[someNode runAction:blockAction];
Это беспокоило меня некоторое время, но для этой проблемы есть простое решение.
Сначала создайте SKAction, чтобы он повторялся вечно, как это (в случае, если вам нужно отложить выполнение метода):
-(void)resizingMySprite
{
//Set duration as long as you want. In my case I needed as low as possible)
SKAction *wait = [SKAction waitForDuration:0.01];
SKAction *performSelector = [SKAction performSelector:@selector(resizing)];
SKAction *sequence = [SKAction sequence:@[performSelector, wait];
SKAction *repeat = [SKAction repeatActionForever:sequence];
[self runAction:repeat];
}
Затем создайте метод resizing и в нем вы запустите ваш метод с аргументами:
-(void)resizing
{
//Let's say you wish to run your method on sprite called mySprite
[self sizeChange:mySprite];
}