SpriteKit - Set Scale and Physics

DogCoffee picture DogCoffee · Sep 30, 2013 · Viewed 8.3k times · Source

What is the correct way to "zoom out" on your scene.

I have an object that I apply an impulse to fire it across the screen. It for example will fire about 100 px across., this works as expected - increase the force it flys more, increase the density it flys less etc.

The problem i have is zooming, the only way I know to zoom out on a scene is to setScale, and the shrinks all my nodes as expected.

But then instead of the object flying the same amount (just zoomed out) it flys more than double the distance.

When I log the mass / density etc of the object before and after I scale they are the same, as expected.

So why doesn't it fly the same amount ? Tried changing the impulse to match the scale, but it doesnt work, yes it flys less distance - but its not one for one with the scaling.

Tricky question...

Thanks for ideas.

Answer

JKallio picture JKallio · Nov 18, 2013

I believe you're not supposed to scale the SKScene (like it hints you if you try setScale method with SKScene). Try resizing it instead.

myScene.scaleMode = SKSceneScaleModeAspectFill;

And then while zooming:

myScene.size = CGSizeMake(myScene.size.width + dx, myScene.size.height + dy);

*Apple documentation says:

Set the scaleMode property to SKSceneScaleModeResizeFill. Sprite Kit automatically resizes the scene so that it always matches the view’s size.