SKSpriteNode在随机路径上的平滑运动

时间:2014-02-22 11:12:12

标签: ios objective-c random sprite-kit

我正在进行一场小型SpriteKit游戏。我想让这个游戏中的“敌人”在玩家周围的随机路径上移动(这是静态的)。

如果我只是在屏幕上选择一个随机点并将动画设置为动画然后重复(例如:每2秒),这将给动作带来非常锯齿状的感觉。

如何使这个随机运动非常平滑(例如:如果敌人决定转身,它将在平滑的U转弯路径上而不是锯齿状锐角)。

PS:敌人必须避开玩家和对方。

2 个答案:

答案 0 :(得分:5)

您可以创建一个节点应该遵循的 SKAction CGPathRef

以下是如何使节点成为圆圈的示例:

SKSpriteNode *myNode = ...

CGPathRef circlePath = CGPathCreateWithEllipseInRect(CGRectMake(0, 
                                                                0, 
                                                              400, 
                                                             400), NULL);
SKAction *followTrack = [SKAction followPath:circle 
                                    asOffset:NO 
                                orientToPath:YES 
                                    duration:1.0];

SKAction *forever = [SKAction repeatActionForever:followTrack];
[myNode runAction:forever];

您还可以创建一个随机UIBezierPath来定义更复杂的路径,并让您的对象跟随它们。

例如:

UIBezierPath *randomPath = [UIBezierPath bezierPath];
[randomPath moveToPoint:RandomPoint(bounds)];
[randomPath addCurveToPoint:RandomPoint(YourBounds)
              controlPoint1:RandomPoint(YourBounds)
              controlPoint2:RandomPoint(YourBounds)];

CGPoint RandomPoint(CGRect bounds)
{
    return CGPointMake(CGRectGetMinX(bounds) + arc4random() % (int)CGRectGetWidth(bounds),
                       CGRectGetMinY(bounds) + arc4random() % (int)CGRectGetHeight(bounds));
}

您使用SKAction使节点遵循路径,并且当操作完成时(节点位于路径的末尾),您计算新路径。

这应该指向正确的方向。

答案 1 :(得分:0)

如果您想生成随机路径,我强烈建议您使用" CGPathAddCurveToPoint",它易于理解且易于使用

转到标题 2。添加&移动敌人

http://code.tutsplus.com/tutorials/build-an-airplane-game-with-sprite-kit-enemies-emitters--mobile-19916

由Jorge Costa和Orlando Pereira编码