Ios 随机路径上SKSpriteNode的平滑运动
我正在做一个小的Ios 随机路径上SKSpriteNode的平滑运动,ios,objective-c,random,sprite-kit,Ios,Objective C,Random,Sprite Kit,我正在做一个小的SpriteKit游戏。我希望游戏中的“敌人”在玩家周围随机移动(这是静态的) 如果我只是在屏幕上选择一个随机点,在那里设置一个运动的动画,然后重复(例如:每2秒),这将给运动一个非常参差不齐的感觉 如何使这种随机运动非常平滑(例如:如果敌人决定掉头,它将在平滑的U形转弯路径上,而不是锯齿状的锐角上) 注:敌人必须同时避开玩家和对方。你可以创建一个带有CGPathRef节点应该跟随的SKAction 下面是一个如何使节点生成圆的示例: SKSpriteNode *myNode =
SpriteKit
游戏。我希望游戏中的“敌人”在玩家周围随机移动(这是静态的)
如果我只是在屏幕上选择一个随机点,在那里设置一个运动的动画,然后重复(例如:每2秒),这将给运动一个非常参差不齐的感觉
如何使这种随机运动非常平滑(例如:如果敌人决定掉头,它将在平滑的U形转弯路径上,而不是锯齿状的锐角上)
注:敌人必须同时避开玩家和对方。你可以创建一个带有
CGPathRef
节点应该跟随的SKAction
下面是一个如何使节点生成圆的示例:
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 *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使节点跟随路径,当操作完成时(节点位于路径的末尾),计算新路径
这将为您指明正确的方向。如果您想生成随机路径,我强烈建议您使用“CGPathAddCurveToPoint”,它简单易懂,易于使用 转到标题2。添加和移动敌人
它由豪尔赫·科斯塔和奥兰多·佩雷拉编码这将使节点在一个圆/椭圆上旋转。。。我需要它是一个随机路径。。。也许我可以每隔2秒添加一个带有一些随机参数的新cgpathref,然后取消当前动画并开始新的动画…我用创建随机
UIBezierPath
的代码更新了我的答案。