Узлы SpriteKit, привязанные к краям сцены/не подпрыгивания

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

У меня есть сцена в SpriteKit, где я хочу, чтобы некоторые круги/шары подпрыгивали и поддерживали любую скорость, которую они имеют бесконечно. Они должны отскакивать от края сцены.

Это работает, если они двигаются достаточно быстро или попадают под довольно резкий угол, но если они идут медленнее и приближаются к плоскости края, они продолжают двигаться (что хорошо), но они "Stick" к краям. Это то, чего я не хочу. Они должны отскочить, даже если идти очень медленно.

Чтобы настроить края, я использовал:

SKPhysicsBody *borderBody = [SKPhysicsBody bodyWithEdgeLoopFromRect:self.frame];
self.physicsBody = borderBody;
self.physicsBody.friction = 0.0;
self.physicsBody.restitution = 1.0;
self.physicsBody.linerDamping = 0.0;
self.physicsBody.angularDamping = 0.0;
self.physicsBody.affectedByGravity = NO;

И на узлах круга у меня есть аналогичные настройки, например:

ball.usesPresciseCollisionDetection = YES;
ball.dynamic = YES;
ball.restitution = 1.0;
ball.linearDamping = 0.0;
ball.angularDamping = 0.0;
ball.friction = 0.0;

У меня есть сила тяжести в моей сцене в ноль. Я добавляю импульс к узлам, и они начинают подпрыгивать. Кажется, очень близко, так как все отскакивает, но если есть какие-то движения, которые медленно движутся и заходят на мелкий угол, они "обнимают" края. Я попробую включить иллюстрацию ниже, чтобы визуализировать.

http://i.imgur.com/Rpr7luY.png

Я пробовал играть с множеством настроек PhysicalBody, но не могу заставить вещи перестать прилипать.

Спасибо!

Ответы

Ответ 1

Как отмечали ребята, этот ответ можно было бы интуитивно рассматривать как шаг в правильном направлении, но проблема связана со всем физическим движком SpriteKit. Он не детерминирован, а фракции теряются при вычислении, вызывая неточное моделирование.

Короткий ответ - вместо этого использовать Box2D. Хакерский ответ - применить импульс в противоположном направлении.

Все данные выделены в моем другом ответе.

@Jurik Glad Я мог бы помочь:)

Ответ 2

Неправильный инициализатор. Существует 2 типа SKPhysicsBody - и на основе краев. Вы используете точно неправильный вид, который не движется участником.

Пожалуйста, ознакомьтесь с Документация SKPhysicsBody.