2013-09-30 3 views
9

Каков правильный способ «уменьшить масштаб» на вашей сцене.SpriteKit - шкала и физика

У меня есть объект, который я применяю импульс, чтобы запустить его по экрану. Это, например, будет срабатывать около 100 пикселей в поперечнике. Это работает так, как ожидалось, - увеличивать силу, которую он летает больше, увеличивать плотность, которую он летает меньше и т. Д.

Проблема у меня есть масштабирование, единственный способ, который я знаю, чтобы уменьшить масштаб на сцене - setScale, и сжимает все мои узлы, как ожидалось.

Но тогда вместо объекта, летящего на ту же сумму (просто увеличенный), он летает более чем в два раза.

Когда я регистрирую массу/плотность и т. Д. Объекта до и после масштабирования, они одинаковы, как и ожидалось.

Так почему же он не летает столько же? Попробовал сменить импульс, чтобы он соответствовал масштабу, но он не работает, да, он летает на меньшее расстояние - но это не одно для одного с масштабированием.

Tricky question ...

Спасибо за идеи.

ответ

10

Простое исправление (спасибо Крису LaPollo, автор на RW)

[self runAction:[SKAction scaleTo:0.5 duration:0]]; 

Ничего еще нужно.

Самое странное, что вы не можете сделать

[self setScale:0.5]; 

Как вы получите это предупреждение, и doenst работу - но работает действие делает - странно !!!

SKScene: Установка масштаба SKScene не влияет.

+2

Вы не можете сделать [self setScale: 0.5]; потому что вы не должны масштабировать сцену. См. Мой ответ ниже. – JKallio

+2

Больше не могу этого сделать: «SKScene: Анимация масштаба SKScene не влияет». – edo42

10

Я считаю, что вы не должны масштабировать SKScene (например, он подсказывает вам, если вы попробуете метод setScale с помощью SKScene). Попробуйте изменение размера вместо.

myScene.scaleMode = SKSceneScaleModeAspectFill; 

И то при масштабировании:

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

* Apple documentation говорит:

Установите свойство ScaleMode в SKSceneScaleModeResizeFill. Sprite Kit автоматически изменяет размер сцены так, чтобы она всегда соответствовала размеру вида.

1

Для таких, как я, которые оказались здесь после поиска, изменение масштаба сцены для уменьшения масштаба больше не работает. Вместо этого, инкапсулировать все узлы в пустом SKNode и запустить действия по этому:

self.rootNode = [SKNode node]; 
// Add your children nodes here to the rootnode. 
[self addChild:self.rootNode]; 
// Zoom out 
[self.rootNode runAction:[SKAction scaleBy:2 duration:5]]; 
// Zoom in 
[self.rootNode runAction:[SKAction scaleBy:.5 duration:5]]; 

сам является SKScene. Надеюсь, это поможет.

Смежные вопросы