使用UIBezierPath沿弧线移动精灵

时间:2015-01-19 18:43:12

标签: ios objective-c sprite-kit trigonometry uibezierpath

我正试图从拍摄'使用圆弧将场景上的节点转换为场景中的动态但已知点。

对于上下文来说,这是一款塔防游戏,这就是“迫击炮”。塔。

我正在使用SpriteKit和Objective-C。我对编码比较陌生,但是我已经走得很远,所以我对事物有了很好的掌握,因为我使用了三角函数而且我已经厌倦了UIBezierPath,所以我已经很久了。

以下是我的代码片段:

CGPoint cannonPointOnScene = [self.scene convertPoint:self.position fromNode:self.parent];
CGPoint originPoint = CGPointMake(realDest.x - cannonPointOnScene.x, realDest.y - cannonPointOnScene.y);
float angle = atan2f(originPoint.y, originPoint.x);

UIBezierPath *testPath = [[UIBezierPath alloc] init];
[testPath addArcWithCenter:CGPointMake(self.position.x , self.position.y) radius:10.0 startAngle:0.0 endAngle:angle clockwise:YES];

SKAction *actionMove = [SKAction followPath:[testPath CGPath] speed:self.projectileSpeed];
        SKAction * actionMoveDone = [SKAction removeFromParent];
SKAction* fire = [SKAction sequence:@[actionMove, actionMoveDone]];

使用该代码,我只是让我的射弹出现在远离塔节点的一个地方,然后从场景中移除。

提前致谢!

1 个答案:

答案 0 :(得分:1)

我无法评论,所以在尝试提供答案之前我不能要求更多信息,但我仍然认为我可以提供帮助。

我无法从你的变量中知道你是如何构建相对于精灵的路径的,但我建议的第一件事是将半径增加到100.0或200.0只是为了看看发生了什么。 10.0是一个相当小的半径。样板游戏的游戏是1024点宽,10.0点不到1%。

您创建的路径是以“self.position”为中心的圆的一部分,半径为10磅。

  • self.position是“一个地方,离塔节点很远”。它也可能受到您的坐标空间的影响,但看起来您已将其与转换点相关联。
  • 半径10.0和起始角度0.0意味着你的射弹从自我右侧10点开始。位置
  • 我不知道您的结束角度是什么,但顺时针设置为YES 你正在绘制圆圈的下半部分。 3点钟结束角度。

鉴于你的描述并假设我们只是使用场景坐标空间,我想:

  • 中心应该是迫击炮和它的目标之间的一个点。
  • 半径应该是迫击炮和它之间距离的一半 目标
  • 如果你从左到右拍摄,则
  • startAngle应为M_PI,如果是,则为0.0 你是从右到左拍摄的。
  • endAngle应介于0.0和M_PI之间。
  • 如果从左到右拍摄,则
  • 顺时针应为YES,如果是,则为NO 你是从右到左拍摄的。

以上建议很多关于你的游戏是如何运作的,并且它不太可能有效,但希望它可以让你很好地了解从哪里开始。