【问题标题】:Move sprite based upon rotation [closed]基于旋转移动精灵[关闭]
【发布时间】:2015-10-19 19:15:00
【问题描述】:

所以我目前正在根据布尔顺时针/逆时针函数旋转精灵。

这是我基于此移动船的编码...

func movesprite(方向方向: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)
    }

}

无论如何,这似乎根本不起作用。 我的船顺时针或逆时针旋转正常,编译器接受这一点,但它与屏幕上的移动无关。

怎么了?

【问题讨论】:

    标签: swift sprite-kit rotation sprite


    【解决方案1】:

    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 之间的兰度值

    根据您的坐标系,您可能需要稍微调整一下 sin 和 cos

    【讨论】:

    • 好的,所以我已经实现了三角函数,但精灵实际上仍然没有继续前进 - 它确实继续围绕它的锚点旋转(这是我想要的)但没有关于 x 的移动/y 轴?
    • 完全没有动静?那么方向等于什么
    • 对不起,我的代码错了,让我编辑一下
    • 这是一个布尔等效变量,基本上 1 = 顺时针,0 = 逆时针。所以从逻辑上讲,我应该能够将这些值链接到 SKActions 的触发器是有道理的?
    • 重读您的问题,我现在了解您的问题,我需要查看更多代码,在我看来,sprite 变量可能在您的屏幕上没有指向 sprite 的链接,所以您调用的操作可能不正确
    猜你喜欢
    • 1970-01-01
    • 2015-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多