旋转 Sprite 时保持矢量方向不变
Keeping Direction of a Vector Constant while Rotating Sprite
我正在尝试制作一个精灵在被物体击中时总是向右移动的游戏。但是,由于 Sprite 不断旋转并且零弧度随 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
不确定这是否适合您:
我会使用方向约束来旋转精灵。在这种情况下,移动可以独立于方向进行。
前段时间做了个教程:http://stefansdevplayground.blogspot.de/2014/09/howto-implement-targeting-or-follow.html
所以我弄明白了是怎么回事。
角度似乎并没有像我最初想象的那样随着 Sprite 旋转,我正在制作的矢量正在使用上面的代码。我遇到的问题是我还为错误的对象设置了碰撞位。如果我只针对精灵设置对象的接触位,我想要的结果就会实现。
我正在尝试制作一个精灵在被物体击中时总是向右移动的游戏。但是,由于 Sprite 不断旋转并且零弧度随 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
不确定这是否适合您: 我会使用方向约束来旋转精灵。在这种情况下,移动可以独立于方向进行。
前段时间做了个教程:http://stefansdevplayground.blogspot.de/2014/09/howto-implement-targeting-or-follow.html
所以我弄明白了是怎么回事。
角度似乎并没有像我最初想象的那样随着 Sprite 旋转,我正在制作的矢量正在使用上面的代码。我遇到的问题是我还为错误的对象设置了碰撞位。如果我只针对精灵设置对象的接触位,我想要的结果就会实现。