Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 随机路径上SKSpriteNode的平滑运动_Ios_Objective C_Random_Sprite Kit - Fatal编程技术网

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
的代码更新了我的答案。