我目前正在将我的一个项目转换为SpriteKit,而我在转换animateWithDuration
为SKAction MoveByY: duration:
First 时遇到了一些麻烦,因为它animateWithDuration
为您提供了一种很好的加速和减速的美感,而SKAction
. 烦人,但不会破坏游戏。其次是animateWithDuration
立即计算其结束位置,而SKAction
不断计算其位置。这对我来说是个问题,因为我有一个游戏板,其中一排spriteNodes
正在向下移动。如果该行中间的一个节点被删除,我需要该节点下方的节点向上移动到现在的空缺位置。这意味着他们要去一个移动的目标,并使用SKAction
他们超越了位置。我可以通过添加另一个来解决这个问题SKAction
,但是我必须考虑到碎片以不同的速度下落,并且它开始快速变得混乱。我想知道是否有人有一个不涉及猜测的干净的解决方案?理想情况下,我会在animateWithDuration
上运行spriteNode
,但不幸的是,这不起作用。
这是我最初的动画代码:
[UIView animateWithDuration:collapseSpeed animations:^{[[[_activePiecesVerticalOne objectAtIndex:piecesInArrayOne - 1] imageView] setCenter:CGPointMake (30, _positionOfLastObjectArrayOne )]; }];
这是我的新代码:
SKAction *collapseUp = [SKAction moveToY:positionOfLastObjectArrayOne duration:collapseSpeed];
collapseUp.timingMode = SKActionTimingEaseInEaseOut; //thanks Can!
SKAction *correctPosition = [SKAction moveByX:0 y:correctionVariable duration:.1];
SKAction *theAnimation = [SKAction group:@[collapseUp, correctPosition]];
[[_fallingPiecesRowOne objectAtIndex:piecesInArrayOne - 1] runAction:theAnimation];
向 Can 道歉,因为我实际上已经在使用 moveTo 而不是 moveBy。变量correctPosition =fallingPiecesSpeed * 25。fallingPieceSpeed 是-.1,这是通过更新方法每0.01 秒移动每个下落部分的距离。我合理化了在 0.25 秒内制作动画所需的 25 个 -.1 运动增量,因此实施此操作以尝试解决我的问题。我相信使用 animateWithDuration,这些运动增量将被存储并在它下落时应用到它,这是我在 SKAction 中所缺少的。只要我将fallPieceSpeed 保持在-.1,这个解决方案似乎就可以正常工作,但是将其提高到-.3 会使我在碎片的最终位置上出现重大不一致。
希望这是有道理的。正如我所提到的,我希望用一种更清洁的方法绕过所有这些,但我可能不得不继续修改它才能找到我的解决方案:S