在更新动画时运行遵循路径的 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的主要内容,如果未能解决你的问题,请参考以下文章
获取 SKPhysicsBody 以在纹理动画时更新(Swift)
按顺序更改SKAction.wait(forDuration :)