【问题标题】:locationInNode returning erroneous resultslocationInNode 返回错误结果
【发布时间】:2015-05-19 17:45:49
【问题描述】:

我有一个名为 Player 的 SKNode 子类,它几乎包含以下内容:http://hub.ae/blog/2014/03/26/soft-body-physics-jellyusing-spritekit/ 转换为 swift(进行了一些更改)。我已经允许用户使用以下代码用手指移动播放器节点:

    override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
    let touch = touches.first as! UITouch
    player.runAction(SKAction.moveTo(touch.locationInNode(world), duration: 1))
}

override func touchesMoved(touches: Set<NSObject>, withEvent event: UIEvent) {
    let touch = touches.first as! UITouch
    player.runAction(SKAction.moveTo(touch.locationInNode(world), duration: 1))
}

override func touchesCancelled(touches: Set<NSObject>!, withEvent event: UIEvent!) {
    player.removeAllActions()
}

override func touchesEnded(touches: Set<NSObject>, withEvent event: UIEvent) {
    player.removeAllActions()
}

*请注意,您看到的“世界”变量只是另一个 SKNode。 'player' 是该节点的子节点。

这看起来应该可以工作,但是节点向非常奇怪的方向移动。这是它的外观示例: http://gyazo.com/87b0d09101bbbfd3ac0f2a3cdbf42e4c

我该如何解决这个问题?我发现将场景的锚点设置为 0.5 可以解决此问题,但是“玩家”节点的物理主体会变得混乱。

【问题讨论】:

    标签: ios swift sprite-kit


    【解决方案1】:

    我有同样的问题,但我不记得我是如何解决它的。尝试改变这个:

    世界>自我

    player.runAction(SKAction.moveTo(touch.locationInNode(world), duration: 1))
    

    收件人:

    player.runAction(SKAction.moveTo(touch.locationInNode(self), duration: 1))
    

    如果我错了,请告诉我:)

    编辑

    将锚点设置为 (0.5,0.5) 并编写这 2 个方法以使您的节点居中。

    override func didSimulatePhysics() {
        camera.position = CGPointMake(player.position.x, player.position.y);
        centerOnNode(camera)
    }
    
    func centerOnNode(node: SKNode){
        var positionInScene : CGPoint = convertPoint(node.position, fromNode: node.parent)
        world.position = CGPointMake(world.position.x - positionInScene.x, world.position.y - positionInScene.y)
    }
    

    【讨论】:

    • 这部分工作。当我点击播放器节点上方时,它会朝错误的方向移动,但是当我点击它下方时,节点会正确移动。以下是正在发生的事情的一个示例:gyazo.com/b968913c3ebd482dbc20bf54b869d071 感谢您的帮助。
    • 你检查过你的触摸坐标吗?他们是正确的吗?必须尝试“moveBy”操作吗?
    • 经过一番调查,我相信问题可能出在我的“节点中心”功能(调用它以将相机放在播放器上)。我相信这正在改变正确的坐标(并且在没有运行该功能的情况下进行测试后,它似乎正在工作)。你知道解决这个问题的方法吗?函数在这里:pastebin.com/QRpQmLab (Pastebinned 由于字符限制)
    • @Aaron 检查编辑。我写了如何以节点为中心
    • 有效!谢谢您的帮助! :)
    猜你喜欢
    • 2021-05-05
    • 2020-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多