【问题标题】:Velocity units in SpriteKitSpriteKit 中的速度单位
【发布时间】:2014-01-05 11:52:22
【问题描述】:

我正在使用 SpriteKit 发射弹丸。使用-(void)applyImpulse:(CGVector)impulse 给射弹节点一个脉冲。

我想计算弹丸在撞击地面之前的飞行距离,知道弹丸节点物理体的速度矢量和重力加速度就可以轻松完成(见Wikipedia: Range of a Projectile)。

但不清楚该距离的单位是什么,以及它们如何转换为SKScene 中的距离。 SKPhysicsBody 的速度属性的 documentation 没有提到单位。我目前正在运行一些测试以找出单位并映射到 SKScene。

有人已经弄清楚了吗?

【问题讨论】:

    标签: ios game-physics sprite-kit


    【解决方案1】:

    单位可能是 CGPoints/秒

    我做了一些实验,通过打印位置变化/时间变化并将其与物理体的速度属性进行比较。这是我的代码:

    func moveInDirection(direction:CGVector, timeInterval:NSTimeInterval){
    
        physicsBody?.linearDamping = damping
        let changeInX = position.x-previous_whale_position.x
        let changeInY = position.y-previous_whale_position.y
        let x_Velocity = changeInX/CGFloat(timeInterval)
        let y_Velocity = changeInY/CGFloat(timeInterval)
        println("the m/svelocity      \(physicsBody!.velocity.dx), \(physicsBody!.velocity.dy)")
        println("the cgpointvelocity  \(x_Velocity), \(y_Velocity)")
        println()
        physicsBody!.applyImpulse(direction*accelerationMultiplier)
        physicsBody!.velocity = physicsBody!.velocity.limitToHypot(maxVelocity)
    
    
    }
    

    这是日志中的一些输出

    the m/svelocity      -419.904, -114.774
    the cgpointvelocity  -411.577, -112.497
    
    the m/svelocity      -410.107, -134.854
    the cgpointvelocity  -522.235, -171.725
    
    the m/svelocity      -406.494, -155.742
    the cgpointvelocity  -413.777, -158.531
    
    the m/svelocity      -395.372, -182.136
    the cgpointvelocity  -396.967, -182.874
    
    the m/svelocity      -389.263, -194.851
    the cgpointvelocity  -397.426, -198.937
    
    the m/svelocity      -384.932, -203.273
    the cgpointvelocity  -388.112, -204.951
    
    the m/svelocity      -383.476, -206.006
    the cgpointvelocity  -390.179, -209.609
    
    the m/svelocity      -382.996, -206.897
    the cgpointvelocity  -389.749, -210.543
    
    the m/svelocity      -382.839, -207.188
    the cgpointvelocity  -385.678, -208.726
    
    the m/svelocity      -382.787, -207.283
    the cgpointvelocity  -386.198, -209.131
    
    the m/svelocity      -382.77, -207.314
    the cgpointvelocity  -386.386, -209.272
    
    the m/svelocity      -382.765, -207.325
    the cgpointvelocity  -387.465, -209.871
    
    the m/svelocity      -382.763, -207.328
    the cgpointvelocity  -387.539, -209.915
    
    the m/svelocity      -382.762, -207.329
    the cgpointvelocity  -388.23, -210.291
    
    the m/svelocity      -385.052, -203.045
    the cgpointvelocity  -396.597, -209.134
    
    the m/svelocity      -404.03, -171.534
    the cgpointvelocity  -300.013, -127.373
    
    the m/svelocity      -411.441, -130.726
    the cgpointvelocity  -522.956, -166.157
    
    the m/svelocity      -422.1, -106.413
    the cgpointvelocity  -427.514, -107.779
    
    the m/svelocity      -425.415, -92.2759
    the cgpointvelocity  -430.583, -93.3979
    
    the m/svelocity      -431.763, -55.4343
    the cgpointvelocity  -451.494, -57.9693
    
    the m/svelocity      -438.175, -25.8145
    the cgpointvelocity  -327.677, -19.3046
    
    the m/svelocity      -435.305, 1.48222
    the cgpointvelocity  -431.963, 1.46786
    
    the m/svelocity      -431.347, 17.6925
    the cgpointvelocity  -555.525, 22.7858
    
    the m/svelocity      -434.409, 27.9586
    the cgpointvelocity  -435.048, 27.9997
    
    the m/svelocity      -432.63, 48.2073
    the cgpointvelocity  -437.134, 48.7081
    
    the m/svelocity      -431.843, 54.8057
    the cgpointvelocity  -440.961, 55.9637
    
    the m/svelocity      -430.199, 66.49
    the cgpointvelocity  -440.097, 68.0202
    
    the m/svelocity      -432.777, 73.2641
    the cgpointvelocity  -321.332, 54.3979
    
    the m/svelocity      -424.901, 76.3717
    the cgpointvelocity  -540.091, 97.0769
    
    the m/svelocity      -427.745, 80.7875
    the cgpointvelocity  -433.12, 81.8004
    
    the m/svelocity      -424.632, 95.811
    the cgpointvelocity  -431.081, 97.2632
    
    the m/svelocity      -423.5, 100.698
    the cgpointvelocity  -429.958, 102.232
    
    the m/svelocity      -423.118, 102.293
    the cgpointvelocity  -434.132, 104.954
    
    the m/svelocity      -426.516, 103.671
    the cgpointvelocity  -316.766, 76.9931
    
    the m/svelocity      -419.455, 102.133
    the cgpointvelocity  -533.238, 129.839
    
    the m/svelocity      -422.936, 103.04
    the cgpointvelocity  -429.117, 104.546
    
    the m/svelocity      -409.127, 99.6756
    the cgpointvelocity  -415.2, 101.156
    
    the m/svelocity      -395.769, 96.4212
    the cgpointvelocity  -399.771, 97.3951
    
    the m/svelocity      -382.847, 93.273
    the cgpointvelocity  -387.945, 94.5152
    
    the m/svelocity      -370.347, 90.2276
    the cgpointvelocity  -374.075, 91.1383
    
    the m/svelocity      -358.255, 87.2816
    the cgpointvelocity  -363.762, 88.6238
    
    the m/svelocity      -346.558, 84.4319
    the cgpointvelocity  -350.016, 85.275
    
    the m/svelocity      -335.243, 81.6751
    the cgpointvelocity  -350.701, 85.4411
    
    the m/svelocity      -326.999, 79.6668
    the cgpointvelocity  -242.241, 59.0151
    
    the m/svelocity      -313.709, 76.4288
    the cgpointvelocity  -404.319, 98.5007
    
    the m/svelocity      -305.995, 74.5495
    the cgpointvelocity  -225.667, 54.9776
    
    the m/svelocity      -293.558, 71.5194
    the cgpointvelocity  -380.591, 92.7216
    
    the m/svelocity      -286.339, 69.7608
    the cgpointvelocity  -217.244, 52.9272
    
    the m/svelocity      -276.99, 67.4831
    the cgpointvelocity  -273.834, 66.7158
    
    the m/svelocity      -265.732, 64.7403
    the cgpointvelocity  -338.328, 82.4244
    
    the m/svelocity      -257.056, 62.6265
    the cgpointvelocity  -265.84, 64.7653
    
    the m/svelocity      -250.735, 61.0865
    the cgpointvelocity  -188.673, 45.9667
    
    the m/svelocity      -242.548, 59.092
    the cgpointvelocity  -242.195, 59.0063
    
    the m/svelocity      -232.69, 56.6902
    the cgpointvelocity  -302.26, 73.6413
    
    the m/svelocity      -226.968, 55.2963
    the cgpointvelocity  -166.956, 40.6744
    
    the m/svelocity      -217.743, 53.0488
    the cgpointvelocity  -287.069, 69.9373
    
    the m/svelocity      -212.389, 51.7444
    the cgpointvelocity  -158.363, 38.5817
    
    the m/svelocity      -205.455, 50.0549
    the cgpointvelocity  -204.966, 49.9354
    
    the m/svelocity      -197.104, 48.0204
    the cgpointvelocity  -254.568, 62.0196
    
    the m/svelocity      -192.257, 46.8396
    the cgpointvelocity  -143.343, 34.9233
    
    the m/svelocity      -184.443, 44.9358
    the cgpointvelocity  -234.465, 57.1213
    
    the m/svelocity      -178.421, 43.4686
    the cgpointvelocity  -179.961, 43.8436
    
    the m/svelocity      -172.595, 42.0494
    the cgpointvelocity  -177.962, 43.3537
    
    the m/svelocity      -168.351, 41.0154
    the cgpointvelocity  -125.254, 30.5169
    
    the m/svelocity      -161.509, 39.3484
    the cgpointvelocity  -204.98, 49.9368
    
    the m/svelocity      -156.235, 38.0636
    the cgpointvelocity  -159.304, 38.8082
    
    the m/svelocity      -151.134, 36.8208
    the cgpointvelocity  -156.913, 38.2251
    
    the m/svelocity      -147.418, 35.9154
    the cgpointvelocity  -109.618, 26.7046
    
    the m/svelocity      -142.605, 34.7428
    the cgpointvelocity  -143.35, 34.9249
    
    the m/svelocity      -136.809, 33.3307
    the cgpointvelocity  -176.614, 43.0291
    
    the m/svelocity      -133.445, 32.5111
    the cgpointvelocity  -99.8049, 24.3138
    
    the m/svelocity      -128.021, 31.1897
    the cgpointvelocity  -165.016, 40.2001
    
    the m/svelocity      -124.873, 30.4228
    the cgpointvelocity  -93.041, 22.6676
    

    所以我得出结论,距离单位几乎是 cgpoints/second.. 当前速度似乎不能很好地代表实际速度。这可能是由于测量是在不同的时间间隔内进行的,在物理模拟期间测量 m/s 速度,而在更新函数期间测量 cgpoint/second 速度。然而,平均而言,我无法解释的 m/s 速度似乎较低。可能发生不精确的舍入

    【讨论】:

      【解决方案2】:

      来自 SpriteKit 编程指南:

      捏造数字 虽然知道 Sprite Kit 很有用 计量国际单位制项目,担心 精确的数字并不那么重要。有没有没关系 你的火箭飞船重 1 公斤或 1,000,000 公斤,只要 质量与游戏中使用的其他物理值一致。 通常,比例比实际值更重要 用过。

      所以质量的单位是公斤,冲量的单位是牛顿秒,扭矩的单位是牛顿,但只要它们在您的游戏中保持一致,就没有那么重要了。

      【讨论】:

      • 感谢您的回答,但它并没有真正回答我的问题。我在编程指南中也读过这部分,说实话觉得有点奇怪。由于脉冲以牛顿秒为单位,因此速度将以 m/s 为单位。我猜秒映射到模拟秒,但不清楚仪表是如何映射到屏幕上的像素的。
      • 实际上,扭矩的单位应该是牛顿米而不是牛顿。嗯,从技术上讲是米牛顿,因为它的 r 交叉 F 和叉积是不可交换的。
      • “担心精确的数字并不那么重要” 傻瓜——整个游戏物理工程世界都以完全“真实”的米和公斤为单位工作。如果GT3之类的团队成员去苹果公司工作,那会很有趣。开什么玩笑。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多