使用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{
当我替换没有参数的方法调用似乎工作正常。
任何意见都赞赏。
答案 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:)