SpriteKit - установите масштаб и физику
Какой правильный способ "уменьшить масштаб" на вашей сцене.
У меня есть объект, который я применяю импульс, чтобы запустить его по экрану. Например, он будет стрелять примерно в 100 пикселей в поперечнике. Это работает как ожидалось - увеличьте силу, которую он летит больше, увеличьте плотность, которую он летит меньше, и т. Д.
Проблема, которую я имею, заключается в масштабировании, единственный способ, которым я знаю, чтобы уменьшить масштаб сцены, состоит в том, чтобы установить Scale, и сжимает все мои узлы, как ожидалось.
Но затем вместо объекта, летящего в том же количестве (просто уменьшенного), он летит более чем вдвое.
Когда я регистрирую массу / плотность объекта до и после масштабирования, они совпадают, как и ожидалось.
Так почему же он не летает на столько же? Попытался изменить импульс в соответствии с масштабом, но он не работает, да, он пролетает меньшее расстояние - но это не один в один с масштабированием.
Вопрос на засыпку...
Спасибо за идеи.
3 ответа
Простое исправление (спасибо Крису ЛаПолло, автору на RW)
[self runAction:[SKAction scaleTo:0.5 duration:0]];
Больше ничего не нужно.
Странно, что вы не можете сделать
[self setScale:0.5];
Когда вы получаете это предупреждение, и оно работает - но выполнение действия - странно!!!
SKScene: установка масштаба SKScene не имеет никакого эффекта.
Я полагаю, что вы не должны масштабировать SKScene (как это вам подсказывает, если вы попробуете метод setScale с SKScene). Попробуйте изменить его размер.
myScene.scaleMode = SKSceneScaleModeAspectFill;
А потом при масштабировании:
myScene.size = CGSizeMake(myScene.size.width + dx, myScene.size.height + dy);
* Документация Apple гласит:
Установите для свойства scaleMode значение SKSceneScaleModeResizeFill. Набор Sprite автоматически изменяет размер сцены так, чтобы он всегда соответствовал размеру представления.
Для таких как я, которые оказались здесь после поиска, изменение масштаба сцены для уменьшения масштаба больше не работает. Вместо этого инкапсулируйте все ваши узлы в пустой 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]];
Я - это сцена SKS. Надеюсь, это поможет.