Хорошо, поэтому я пишу код для космической бластерной игры, и все, кажется, идет хорошо, минус эти важные проблемы.Физические тела SpriteKit Коллизии в нескольких слоях
Во-первых, я добавил космический корабль (с физикой) как ребенок сам (GameScene).
Затем я добавил фоновый слой как узел также как дитя себя, за космическим кораблем и имитировал движение, перемещая фон вокруг космического корабля с помощью джойстика.
Я добавил узел с физическим телом граничной физики Edge Loop, чтобы фон не выходил за пределы корабля и добавил этот узел как дочерний элемент bgLayer.
У меня есть объекты для запуска космического корабля, но я хочу, чтобы они перемещались в фоновом режиме, поэтому я добавил их как детей из bgLayer.
Конечно, мне нужен был лазер, когда стрелял космический корабль, поэтому я добавил его, а также ребенка из bgLayer.
_spaceship.physicsBody = (custom physicsBody code);
[self addChild:_spaceship];
_bgLayer = [SKNode node];
[self addChild:_bgLayer];
_bounds = [SKNode node];
_bounds.physicsBody = (physicsBody edgeLoop code);
[_bgLayer addChild:_bounds];
_otherObjects.physicsBody = (custom physicsBody code);
[_bgLayer addChild:_otherObjects];
_laser.physicsBody = (custom physicsBody code);
[_bgLayer addChild:_laser];
Все хорошо, фон не выйти за пределы космического корабля, другие объекты перемещаются в качестве фона движется, и лазерные огни, когда призвали.
Моя первая большая дилемма - когда мой лазер срабатывает, он не перемещается по мере движения фона, но фон движется за ним. Возможно, я мог бы сделать, но это выглядит забавно, если лазер всегда двигается параллельно с кораблем. Это кажется странным для меня, так как я добавил лазер в детстве _bgLayer.
Во-вторых, физика моего лазера, похоже, не распознает тело EdgeLoop и не проплывает прямо через него. Кроме того, мой физический корабль космического корабля, похоже, распознает тело EdgeLoop, но он не распознает другие объекты, которые являются дочерними элементами _bgLayer.
Физические тела, которые не являются детьми одного слоя, узнают друг друга? И почему мой лазер не ведет себя так же, как другие дети того же слоя?
В физическом двигателе нет слоев. В каждой сцене есть один физический мир. Вам просто нужно установить категории столкновений и что-то подобное, и обязательно настройте все, что определяет, если и как объект участвует в физике. – uchuugaka
Я прошу прощения за то, что я не добавил это в свой пример кодирования, но я установил для них категорию и бит-бит столкновений, но лазер, похоже, игнорирует эти настройки. – wtivie05