使用参数执行选择器BUT进行SKAction

时间:2014-07-17 16:17:09

标签: ios objective-c sprite-kit 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”。如何将参数添加到performSelector SKAction? 谢谢!

修改
基本上我想要SKAction等价:

[self performSelector:@selector(sizeChange:) withObject:sprite];

或者永远重复代码的方法。谢谢!

2 个答案:

答案 0 :(得分:4)

查看SKAction的{strong> customActionWithDuration:actionBlock: 方法,该方法会创建一个持续时间内执行阻止的操作。您可以在操作块中指定自定义代码。

+ (SKAction *)customActionWithDuration:(NSTimeInterval)seconds 
                           actionBlock:(void (^)(SKNode *node, 
                                          CGFloat elapsedTime))block

或者,您也可以使用runBlock:方法。

SKAction* blockAction = [SKAction runBlock:^
{
    // your code here 
}];

[someNode runAction:blockAction];

答案 1 :(得分:0)

这让我困扰了一段时间,但这个问题有一个简单的解决方法。

首先创建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];
}

然后创建方法大小调整,在其中运行带参数的方法:

-(void)resizing
{
  //Let's say you wish to run your method on sprite called mySprite
 [self sizeChange:mySprite];
}