Xcode 如何仅当物体在swift中快速移动时测试碰撞

Xcode 如何仅当物体在swift中快速移动时测试碰撞,xcode,swift,sprite-kit,Xcode,Swift,Sprite Kit,目前,我正在测试collisionImpulse,它在95%的时间内都能正常工作,但每隔一段时间,该对象就会以相同的速度穿过精灵,但返回的数字要大得多。我希望两个物体在缓慢移动时发生碰撞,但在快速移动时触发动作 这就是我现在正在做的 func didBeginContact(contact: SKPhysicsContact) { if(contact.bodyB.node?.name == "sprite" && contact.bodyA.node?.name ==

目前,我正在测试collisionImpulse,它在95%的时间内都能正常工作,但每隔一段时间,该对象就会以相同的速度穿过精灵,但返回的数字要大得多。我希望两个物体在缓慢移动时发生碰撞,但在快速移动时触发动作

这就是我现在正在做的

 func didBeginContact(contact: SKPhysicsContact) {
    if(contact.bodyB.node?.name == "sprite" && contact.bodyA.node?.name == "object") {
        if(contact.collisionImpulse > 3e-5){
我的collisionImpulse输出如下所示:

0.317869

0.285309

0.899219

0.0272814

0.325666

6.4235e-09

最后一个是一个直接通过,但出现在屏幕上的其他人一样

我想跳出来的那个看起来像

1.71999e-07


我是不是在别的地方遗漏了什么?或者是否有更好的方法来测试,从而产生更一致的结果?

您可能需要研究一个名为“牛顿秒”的属性,每个SKContact(在您的“didbegincontact”方法中)都将具有此值。基本上,这表明了碰撞有多严重。因此,如果它是一个子弹,那么它将非常高,但是如果它是来自其他人的点击,那么它的值将非常低


就我个人而言,我会按类别来做,并测试位掩码。基本上,您要做的是为每个类别的对象创建一个UInt32变量,并将其设置为(0x01)是否检查
contact.bodyB.node?.name
为“object”和
contact.bodyA.node?.name
为“sprite”的情况?我是……我把他们分开,看看这是否是问题的一部分。有没有办法用防毒面具告诉我球员击球有多用力?或者我是不是要回到牛顿秒。无论哪种方式,牛顿秒都可能是你想要的。你为什么不试着打印每个触点的牛顿秒,看看它是否符合你的要求预计起飞时间。
var c_Ball:UInt32 = (0x01 << 1)
var c_Fairy:UInt32 = (0x01 << 2)
var c_Human:UInt32 = (0x01 << 3)

var humantestbitmask = c_Fairy | c_Ball //SKPhysics contacts will only be made when the player hits a ball or fairy, not another human.