在更新动画时运行遵循路径的 SKAction

Posted

技术标签:

【中文标题】在更新动画时运行遵循路径的 SKAction【英文标题】:run SKAction that follows path while updating animations 【发布时间】:2015-10-28 23:31:13 【问题描述】:

我正在使用精灵套件。我需要我的角色在更新动画时沿着路径移动。例如,当我的 skspritenode 开始向左移动时,我想将我的跑步动画更改为面向左的跑步动画。

我尝试了许多序列、运行块等的组合,但没有任何效果。有什么建议么。伪代码如下:

//run initial run animation
//get array of points to move to
//load skactions into an array 
   //upon completion of an skaction re-evaluate which animation to use.
//repeat

//run sequence of SKActions

感谢您的帮助。

【问题讨论】:

你的角色是一直在奔跑还是只是在用户操作后移动? 他们一直在奔跑。给 skspritenode 一个坐标数组来跟随。这就是我的难处。 我想出了如何让它工作。我只是使用递归。在我的函数中,我只是启动动画以永远运行,然后我使用完成句柄执行第一个移动指令(skaction),再次调用该函数。我有一个静态变量来跟踪我所处的运动阶段。我从类属性 nsarray 访问我的运动步骤。也许有更好的方法,但现在这似乎工作正常。 我想修改我所说的。尽管我能够使用此递归调用运行动画和移动命令,但它存在未知问题。我仍然很好奇是否有人知道如何在运行一系列 skaction 移动指令时更新动画。 【参考方案1】:

好吧,我想通了。为了阐明我想要什么,我想在一个数组中获取一系列点并通过一个函数运行它们,该函数将移动我的 skspritenode 并在其上运行与我的角色需要运行的方向相对应的动画。这是我所做的:

//这里的i和j都是int类变量,别问我为什么有两个,但是有效所以没改。

    for (;i<len;i++) 
        [actions_array addObject:[SKAction moveTo:CGPointMake(apath[i].x, apath[i].y) duration:1.0]];
        [actions_array addObject:[SKAction runBlock:^(void)
            j++;
//remove the previous action just in case
                [self removeActionForKey:[NSString stringWithFormat:@"%d",j-1]];
                NSArray* frames = [self returnAnimForMoveToPt:CGPointMake(path_to_goal[j+1].x, path_to_goal[j+1].y)];
                [self runAction:[SKAction repeatActionForever:[SKAction animateWithTextures:frames timePerFrame:1.0/30.0]] withKey:[NSString stringWithFormat:@"%d",j]];
            ]];
            

    [self run

Action:[SKAction sequence:actions_array] completion:^(void)
                //******movement complete, at location*******!!!!!!!!
                [self goIdle];
//other completion handl
            ];

基本上我只是重复运行移动指令,然后运行带有动画的 runBlocks。希望这会有所帮助。

【讨论】:

以上是关于在更新动画时运行遵循路径的 SKAction的主要内容,如果未能解决你的问题,请参考以下文章

SKAction 仅在睡眠后或运行调试器时运行

获取 SKPhysicsBody 以在纹理动画时更新(Swift)

按顺序更改SKAction.wait(forDuration :)

SpriteKit - 对在多个 SKNode 上运行的多个 SKAction 进行排序

一次运行两个 SKAction

如何防止在暂停场景上运行 SKAction(取消暂停后),节点纹理在暂停/取消暂停场景后不改变