相关疑难解决方法(0)

SpriteKit中的持续移动

我有一个游戏,我想向左或向右移动一个SKNode,具体取决于用户是否触摸屏幕的左侧或右侧.如何在用户触摸屏幕时将恒定运动应用于节点?

ios sprite-kit

18
推荐指数
3
解决办法
2万
查看次数

创建通过"转圈"将玩家从当前位置移动到新位置的路径

我一直在捣乱我的大脑几天试图想出一种方法,使用Swift和SpriteKit将玩家从当前位置移动到新位置.听起来相对容易.

现在,我知道我可以使用a CGPath和a SKAction来沿着路径移动玩家,但我需要知道的是如何创建玩家移动的路径.

我需要玩家移动预定的半径,因为它在移动时首先转向新点,让我演示......

转圈

因此,红色圆圈是玩家及其当前方向,大圆圈是转弯半径,红色十字架是玩家想要移动的可能点(显然你在任何时间点只有一个,但是想法是证明一个可能的点和另一个点之间的运动差异)

此外,玩家可以向左或向右移动,这取决于哪条路径最短到目标点.

我尝试了什么(对不起,列表有点简短)......

基本上,我知道玩家当前的位置/方向; 我知道转弯圈的半径,我知道我要移动的点.我需要计算玩家最初需要通过哪个弧来定位自己到新点(CGPathAddLineToPoint在弧的末端加上应该是微不足道的)

除了花费大量时间阅读文档,谷歌搜索,阅读博客文章和教程之外,我还尝试从开始角度到给定迭代级别(例如+/- 0.5度)循环一系列角度并计算当前点与圆上下一个点之间的角度,并将其与当前点与目标点的角度进行比较,并基本上选择具有最小差值/ delta的角度...

三角洲角度

因此,两个红色圆圈代表圆圈上的两个点,蓝色线条代表它们之间的角度,绿色线条代表从第一个点到目标点的角度.

我们只是说,虽然这可能有用,但我对这个想法感到震惊,并希望有可能提出更好/更快的解决方案.

我不确定是否CGPathAddArcToPoint会有所帮助,因为它会从我的球员当前位置到目标点产生弧线,而不是让玩家通过转弯圈.

一旦玩家离开转弯圈,如果直线移动或不移动(即它们可以略微弯曲到目标点),我不会特别讨厌,但我现在专注于尝试计算所需的弧所需让玩家开始.

对不起,我的数学很差,所以请你好

代码"当前"看起来像(一个完整的混乱)

func pointTowards(point thePoint: CGPoint) {

    // Need to calculate the direction of the turn

    //let angle = atan2(thePoint.y - self.position.y, thePoint.x - self.position.x) - CGFloat(180.0.toRadians());
    let angle = angleBetween(startPoint: self.position, endPoint: thePoint) - CGFloat(180.0.toRadians())

    if (self.zRotation < 0) {
    //  self.zRotation
    //  self.zRotation = self.zRotation + M_PI * 2;
    }

    let rotateTo: SKAction = SKAction.rotateToAngle(angle, …
Run Code Online (Sandbox Code Playgroud)

math ios sprite-kit swift

6
推荐指数
1
解决办法
1188
查看次数

标签 统计

ios ×2

sprite-kit ×2

math ×1

swift ×1