根据旋转移动精灵
Move sprite based upon rotation
所以我目前正在根据 bool 顺时针/逆时针函数旋转精灵。
这是我基于此对船舶移动进行的编码...
func movesprite(direction direction: rotationDirection) {
// Moves sprite left or right dependent on rotation //
let movespriteLeft = SKAction.moveByX(-100, y: 0, duration: 1)
let movespriteRight = SKAction.moveByX(100, y: 0, duration: 1)
if sprite == (direction == .clockwise) {
sprite.runAction(moveshipLeft)
}
else if sprite == (direction == .counterClockwise) {
sprite.runAction(moveshipRight)
}
}
无论如何,这似乎根本行不通。
我的船确实顺时针或逆时针旋转,编译器接受了这一点,但它与屏幕上的运动无关。
怎么了?
moveByX/Y 根据屏幕坐标移动您的精灵,而不是您的船的位置,因此移动将始终基于 x 或 y 轴。你需要在你的 moveby 中加入一些三角函数(sin 和 cos),让它按照你想要的路径移动:
let movespriteLeft = SKAction.moveByX(-100 * sin(ANGLE), y: -100 * -cos(ANGLE), duration: 1)
let movespriteRight = SKAction.moveByX(100 * sin(ANGLE), y: 100 * -cos(ANGLE), duration: 1)
其中ANGLE是0到2PI的randian值
根据您的坐标系,您可能需要稍微研究一下 sin 和 cos
所以我目前正在根据 bool 顺时针/逆时针函数旋转精灵。
这是我基于此对船舶移动进行的编码...
func movesprite(direction direction: rotationDirection) {
// Moves sprite left or right dependent on rotation //
let movespriteLeft = SKAction.moveByX(-100, y: 0, duration: 1)
let movespriteRight = SKAction.moveByX(100, y: 0, duration: 1)
if sprite == (direction == .clockwise) {
sprite.runAction(moveshipLeft)
}
else if sprite == (direction == .counterClockwise) {
sprite.runAction(moveshipRight)
}
}
无论如何,这似乎根本行不通。 我的船确实顺时针或逆时针旋转,编译器接受了这一点,但它与屏幕上的运动无关。
怎么了?
moveByX/Y 根据屏幕坐标移动您的精灵,而不是您的船的位置,因此移动将始终基于 x 或 y 轴。你需要在你的 moveby 中加入一些三角函数(sin 和 cos),让它按照你想要的路径移动:
let movespriteLeft = SKAction.moveByX(-100 * sin(ANGLE), y: -100 * -cos(ANGLE), duration: 1)
let movespriteRight = SKAction.moveByX(100 * sin(ANGLE), y: 100 * -cos(ANGLE), duration: 1)
其中ANGLE是0到2PI的randian值
根据您的坐标系,您可能需要稍微研究一下 sin 和 cos