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 在触摸时移动物理身体(空气曲棍球游戏)的主要内容,如果未能解决你的问题,请参考以下文章