SKAction执行选择器语法错误

时间:2014-10-31 22:03:14

标签: sprite-kit skaction

使用SKAction序列我试图添加一个延迟然后调用一个带有两个参数的方法,但是我继续得到以下内容(obj c的新内容可能很简单):

// code 
SKAction *fireAction = [SKAction sequence:@[[SKAction waitForDuration:1.5 withRange:0],
                                [SKAction performSelector:@selector(addExplosion:firstBody.node.position  andTheName: @"whiteExplosion") onTarget:self]]];

//错误

  

预期':'

方法声明

-(void) addExplosion : (CGPoint) position andTheName :(NSString *) explosionName{

当我替换没有参数的方法调用似乎工作正常。

任何意见都赞赏。

2 个答案:

答案 0 :(得分:2)

使用[SKAction runBlock:^{}]代替选择器。

如果方法没有参数,我会使用选择器。使用块更强大。但要注意如何使用它们,因为它可能会使预期的已删除对象保持活跃状态​​。

__weak typeof(self) weakself = self;
SKAction *fireAction = [SKAction sequence:@[
                        [SKAction waitForDuration:1.5 withRange:0],
                        [SKAction runBlock:^{
    [weakself addExplosion:position andTheName:explosionName];
}]]];

或使用完成块:

__weak typeof(self) weakself = self;
SKAction *fireAction = [SKAction waitForDuration:1.5 withRange:0];

[someNode runAction:fireAction completion:^{
    [weakself addExplosion:position andTheName:explosionName];
}];

答案 1 :(得分:1)

@selector的正确语法是:

 @selector(addExplosion:andTheName:)

您必须省略实际的变量名称,只需指定参数名称。

还允许我建议"和TheName"是一个错误的参数名称,ObjC指南明确规定不使用"和"。如果你的选择器参数被命名为这两个中的一个,那么你的可读性就没有任何损失:

 @selector(addExplosion:name:)
 @selector(addExplosion:withName:)