Search code examples
iosgame-physicssprite-kit

Velocity units in SpriteKit


I am using SpriteKit to shoot a projectile. The projectile node is given an impulse using -(void)applyImpulse:(CGVector)impulse.

I want to calculate the distance the projectile will fly before hitting the ground, which can be done easily knowing the velocity vector of the projectile node's physicsbody and the gravitational acceleration (see Wikipedia: Range of a Projectile).

It is however not clear what the units are of this distance and how they translate to distances in the SKScene. The documentation of SKPhysicsBody's velocity property do not mention units. I am currently running some tests to figure out the units and mapping to the SKScene.

Has anyone figured this out already?


Solution

  • The units are likely CGPoints/second

    I did some experimentation by printing the change in position/change in time and comparing that to the velocity property of the physics body.. here is my code:

    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)
    
    
    }
    

    here is the some of the output in the log

    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
    

    so i conclude that the units of distance are nearly cgpoints/second.. the current velocity seems to not represent the actual velocity very well. This might be attributed to the fact that the measurements are taken over different time intervals with the m/s velocity being measured during the physics simulation and the the cgpoint/second velocity being measure during the update function. However the m/s velocity seems lower on average which I cannot explain. perhaps rounding occurs that is imprecise