(iOs SpriteKit)在方法中传递精灵

时间:2013-11-27 13:02:43

标签: ios objective-c

我希望在山脉移动的背景标题屏幕上产生视差效果。我要做的“技巧”是当一座山走到屏幕的尽头,而不是破坏节点并在开始位置再次创建它,我只是想将它的位置改为开始位置并循环其余的动作。为此,我在createSceneContents()函数的开头创建了我的山脉精灵,我将精灵传递给一个方法animate(),它永远都是同样的动作组合:向右动画,然后当它在x位置时,改变mountain.position.x到开始...

-(void)createSceneContents{

//crear
SKSpriteNode *mountain = [SKSpriteNode spriteNodeWithImageNamed:@"mountain.png"];
mountain.name = @"mountain";
//initial position
mountain.position = CGPointMake(-161.5,15);
//animate
SKAction *animRight = [SKAction moveToX:801.5 duration:4];

SKAction *comboActions = [SKAction repeatActionForever:[SKAction performSelector:@selector(animate:mountain) onTarget:@"mountain"]];

这里我有我的方法声明:

    - (void) animate:(SKSpriteNode*)mountain
{
      // code....
}

我的问题是我总是在我的方法中传递SKSpriteNode *山时出错 我疯狂地尝试着。

1 个答案:

答案 0 :(得分:0)

您可以使用此类自定义操作来避免performSelector操作。

SKAction* parallaxMoveAction = [SKAction sequence:@[[SKAction moveToX:801.5 duration:4.0f],[SKAction customActionWithDuration:0 actionBlock:^(SKNode* node, CGFloat elapsedTime){
            [node setPosition:CGPointMake(-161.5,15)];
        }]]];

如果您将自定义操作持续时间设置为0,则只会执行一次。

另一方面,执行选择器操作应如下所示:

[SKAction performSelector:@selector(animate:) onTarget:self]

据我所知,你无法传递论据。