在游戏中修改SKActions

时间:2015-07-17 08:01:41

标签: ios objective-c sprite-kit

我正在开发一款游戏,其中所有的敌人都是他们自己班级中的SKNodes。在我的SKScene中,我通过分配它们并调用特定的产卵方法来产生小怪。

但是,当它们产生时,每个暴徒都会定义一系列在其生命周期中运行的动作。一个例子是针对一个特定的暴徒:

    SKAction *moveLeft = [SKAction moveToX:0 - (fragment.size.width/2) + (width / 2) duration:1.0];
    SKAction *moveRight = [SKAction moveToX:(fragment.size.width / 2) - (width / 2) duration:1.0];

    SKAction *sequence = [SKAction sequence:@[moveLeft, moveRight]];
    SKAction *bounceOnWalls = [SKAction repeatActionForever:sequence];

    [enemy runAction:bounceOnWalls];

所以,回到我的问题。如何在创建特定SKAction后对其进行修改?我想改变所有具有此SKAction的敌人moveLeft的速度。

1 个答案:

答案 0 :(得分:1)

您可以使用密钥运行操作:

SKAction *moveLeft = [SKAction moveToX:0 - (fragment.size.width/2) + (width / 2) duration:1.0];
    SKAction *moveRight = [SKAction moveToX:(fragment.size.width / 2) - (width / 2) duration:1.0];

    SKAction *sequence = [SKAction sequence:@[moveLeft, moveRight]];
    SKAction *bounceOnWalls = [SKAction repeatActionForever:sequence];

    [enemy runAction:bounceOnWalls withKey:@"moving"]; //Run action with key

当您需要在运行该操作的所有节点上更改速度时,可以使用enumerateChildNodesWithName方法。像这样:

[parentNode enumerateChildNodesWithName:name usingBlock:^(SKNode *node, BOOL *stop){

        if([node actionForKey:@"moving"]){


            SKAction* action = [node actionForKey:@"moving"];

           action.speed = 1.5f;

        }

    }];

你可能会动态改变动作的持续时间并以这种方式影响移动节点的速度,但我认为直接改变动作的速度是更好的选择。请查看此example中有关如何动态更改持续时间参数的两个答案。