【问题标题】:run SKAction that follows path while updating animations在更新动画时运行遵循路径的 SKAction
【发布时间】: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 移动指令时更新动画。

标签: sprite-kit 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。希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-11
    • 1970-01-01
    • 2021-11-24
    • 1970-01-01
    • 2016-02-22
    • 2012-12-11
    • 1970-01-01
    相关资源
    最近更新 更多