2017-02-15 14 views
1

У меня есть большой прямоугольник SKPhysicsBody, созданный с помощью SKPhysicsBody(edgeLoopFrom:...). Внутри этого физического тела есть куча шаров, которые отскакивают. Когда появляется уведомление, я показываю вид снизу экрана. Я хочу изменить размер SKPhysicsBody, чтобы шары отскакивали от этого уведомления, пока он находится на экране.Изменить размеры SKPhysicsBody края и держать детей внутри

Что я делаю сейчас

func updateWalls() { 
    let wallInsets = UIEdgeInsetsMake(bottomWallInset, 0, 0, 0) 
    scene.physicsBody = SKPhysicsBody(edgeLoopFrom:UIEdgeInsetsInsetRect(bounds, wallInsets)) 
} 

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

Есть ли элегантный способ оживить переход между старыми и новыми границами стен, так что любые шары, которые лежат внизу, «подметаются» в новые размеры и гарантированно остаются внутри стены? You can't scale an SKPhysicsBody directly.

ответ

1

В этой ситуации вместо изменения размера физического тела, вероятно, легче создать узел для представления уведомления. То есть сделайте SKNode, который ничего не визуализирует, присоедините тело физики к нему того же размера, что и представление уведомления, и просто переместите узел вместе с видом уведомления. Вы можете создать анимацию для перемещения узла с той же скоростью, что и анимация. Это должно дать эффект, который вам нужен, с меньшей возможностью запутать физическое моделирование.

0

SpriteKit всегда имеют проблемы с масштабированием SKPhysicsBody, так как физическое устройство не остается неизменным, между физическими свойствами тела нет «непрерывности». Так что это не очень хорошо.

Я хочу обратить ваше внимание на различие между узлами и physicsBodies: вы могли бы построить 2 стены с его physicsBody и когда вы не нуждаетесь в одном из них вы могли бы сделать ishidden = true, чтобы скрыть узел и установить isDynamic = false отключить физику взаимодействия. Итак, когда-то у вас есть внутренняя стена с ее телом, после того как вы можете скрыть интерьер, отключите физическое взаимодействие и включите внешнюю стену с ее физикой.

О переходе между старыми и новыми границами стены вы можете изучить анимацию между двумя узлами.

+0

Спасибо за помощь. Переход между двумя физическими телами будет таким же, как у меня сейчас, где я просто заменяю один на другой. Тем не менее, я все еще придерживаюсь того, как сделать анимацию. – bcattle

+0

Попытайтесь отключить physicalBody к внутреннему узлу, затем используйте внутренний узел, чтобы сделать анимацию и стать похожим на внешнюю стену (но без физики) и скрыть ее в конце (так что покажите внешний узел). В конце концов, сообщите о скрытом внутреннем узле в его исходное измерение –

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

  • Нет связанных вопросов^_^