我正在尝试制作一个游戏,其中精灵在被物体击中时将始终向右移动。然而,由于Sprite不断旋转并且零弧度随Sprite一起旋转,因此如果精灵面向左并撞击对象,则我的计算幅度将朝相反方向移动。即使零面向左,有没有办法保持幅度方向总是指向右边?
// referencePoint = upper right corner of the frame
let rightTriangleFinalPoint:CGPoint = CGPoint(x: referencePoint.x, y: theSprite.position.y)
let theSpriteToReferenceDistance = distanceBetweenCGPoints(theSprite.position, b: referencePoint)
let theSpriteToFinalPointDistance = distanceBetweenCGPoints(theSprite.position, b: rightTriangleFinalPoint)
let arcCosineValue = theSpriteToFinalPointDistance / theSpriteToReferenceDistance
let angle = Double(acos(arcCosineValue))
let xMagnitude = magnitude * cos(angle)
let yMagnitude = (magnitude * sin(angle)) / 1.5
答案 0 :(得分:0)
不确定这是否适合您: 我会使用方向约束来旋转精灵。在这种情况下,移动可以独立于方向完成。
前段时间我做了一个教程:http://stefansdevplayground.blogspot.de/2014/09/howto-implement-targeting-or-follow.html
答案 1 :(得分:0)
所以我弄清楚发生了什么。
似乎角度不像我原先想的那样用Sprite旋转,我正在制作的矢量正在使用上面的代码。我遇到的问题是我还为错误的对象设置了碰撞位。如果我只针对精灵设置对象的接触位,那么我想要的结果就会成真。