SpriteKit 在触摸时移动物理身体(空气曲棍球游戏)

Posted

技术标签:

【中文标题】SpriteKit 在触摸时移动物理身体(空气曲棍球游戏)【英文标题】:SpriteKit move physics body on touch (air hockey game) 【发布时间】:2015-08-04 16:37:38 【问题描述】:

我正在尝试使用 SpriteKit 制作空气曲棍球游戏。我试图让冰球可拖动,但我不能让它们在触摸结束后继续移动。现在我正在绑定触摸和冰球,并在触摸移动时设置它的位置。

使用物理系统:

override func update(currentTime: NSTimeInterval) 
        for (touch, node) in draggingNodes 
            let targetPosition = touch.locationInNode(self)
            let distance = hypot(node.position.x - targetPosition.x, node.position.y - targetPosition.y)
            var damping = sqrt(distance * 100)
            if (damping < 0) 
                damping = 0.0
            
            node.physicsBody!.linearDamping = damping
            node.physicsBody!.angularDamping = damping
            let translation = CGPointMake(targetPosition.x - node.position.x, targetPosition.y - node.position.y)
            node.physicsBody!.velocity = CGVectorMake(translation.x * 100, translation.y * 100);
        
    

【问题讨论】:

你在设备上试过了吗?模拟器并不是测试此类行为的最佳选择。 在模拟器上试过,我没有ios开发者账号,我用的是xcode 6.x 您可能会发现这很有用***.com/questions/28245653/how-to-throw-skspritenode 成功了!谢谢你。将其发布为答案,以便我可以给您积分:D @JDoe 感谢您在问题中提供的代码!它帮助我解决了我自己的问题! 【参考方案1】:

您可能需要做更多的阅读。要么你会使用物理系统:

在这种情况下,您将在触摸结束事件时将impulse 分配给冰球,并根据从上一帧到当前帧的位置增量和时间增量(或某种类型的平均值)计算速度超过 1 帧)。 https://developer.apple.com/library/ios/documentation/GraphicsAnimation/Conceptual/SpriteKit_PG/Physics/Physics.html

[或]

您将在冰球上手动设置速度(不使用物理系统),然后根据该速度手动更新冰球每帧的位置,然后在它与另一个物体接触时根据角度重新计算其矢量发生率。

【讨论】:

我正在使用物理系统。问题是在触球结束后冰球停止移动或回到最后一个位置。 我试过了,但没用(没有继续),所以我回到只是设置位置 那是因为你手动设置它的位置。因此,请阅读我的答案的第一部分,该部分谈到必须基于从前一帧计算矢量来在物理体上设置脉冲。

以上是关于SpriteKit 在触摸时移动物理身体(空气曲棍球游戏)的主要内容,如果未能解决你的问题,请参考以下文章

当在 Swift Spritekit 中触摸并按住屏幕时,我将如何向上移动我的节点?

意外的物理体现在SpriteKit场景中

SpriteKit 中的持续移动

如何在 SpriteKit 中呈现场景后立即接收触摸事件?

在 SpriteKit 中禁用 SKNode 的旋转

spritekit 在移动到接触点时切换图像