gpt4 book ai didi

ios - 在游戏过程中修改 SKActions

转载 作者:行者123 更新时间:2023-11-29 12:18:12 27 4
gpt4 key购买 nike

我正在开发一款游戏,其中所有的敌人都是各自类别中的 SKNode。在我的 SKScene 中,我通过分配生物并调用特定的生成方法来生成它们。

然而,当它们被生成时,每个生物都被定义了一组它们在其生命周期内运行的 Action 。一个针对特定生物的例子是:

    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 的速度。

最佳答案

您可以使用键运行操作:

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;

}

}];

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

关于ios - 在游戏过程中修改 SKActions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31471022/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com