Velocity units in SpriteKit
Asked Answered
F

2

11

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?

Frosted answered 5/1, 2014 at 11:52 Comment(0)
K
4

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

Kieffer answered 20/8, 2015 at 21:43 Comment(0)
G
0

From the SpriteKit programming guide:

Fudging the Numbers While it is useful to know that Sprite Kit measures items in the International System of Units, worrying about precise numbers is not that important. It doesn’t matter much whether your rocket ship weights 1 kilogram or 1,000,000 kilograms, as long as the mass is consistent with other physics values used in the game. Often, proportions are more important than the actual values being used.

So mass is in kg, impulses are newton-seconds, and torque is in newtons, but it really doesn't matter that much as long as they are consistent throughout your game.

Gennagennaro answered 6/1, 2014 at 21:33 Comment(3)
Thanks for the answer, but it doesn't really answer my question. I had read this part too in the programming guide, and found it a bit strange, to be honest. Since impulse is in newton-seconds, velocity will be in m/s. I'm guessing the seconds map to simulated seconds, but it's not clear how the meters are mapped to pixels on screen.Frosted
Actually, torque should be in Newton-meters not Newtons. Well, technically meter-Newtons since its r cross F and the cross product is not commutative.Costume
"worrying about precise numbers is not that important" What absolute fools - the entire world of game physics engineering works in completely "real" meters and kg. It would be quite funny if some team members from GT3 or the like went to work at Apple. What a joke.Crushing

© 2022 - 2024 — McMap. All rights reserved.