SpriteKit: физические проблемы с формой тела "альфа" - PullRequest
0 голосов
/ 29 июня 2019

Я работаю с моим сыном над основной игрой, основанной на книге Dive Into SpriteKi Пола Хадсона .

После этой книги мы создали спрайт для космического корабля икосмический мусорный спутник.Это работает, но мы замечаем, что иногда корабль проходит через мусор.Мы попытались добавить спрайты с помощью редактора сцены и включили физику:

picture showing the issues with physics body shapes

Примечательно, что у узла корабля, добавленного с помощью редактора сцены, совершенно неправильный контур физического телагенерируется, но выполнение

player.physicsBody = SKPhysicsBody(texture: player.texture!, size: player.size)

действительно исправляет это.С другой стороны, выполнение одного и того же спрайта для мусорного спутника всегда приводит к одному и тому же извилистому физическому телу.

Мое единственное предположение - что-то не так с тем, как (или когда) текстура загружается и анализируется.Это объяснило бы, почему это неоднократно исправляет ракетный корабль ... но что не так со спутником?И как убедиться, что текстура правильно подготовлена, чтобы альфа-маска для тела работала надежно?

Буду признателен за любые советы о том, как справиться с этой проблемой (-ами).

Я пыталсяиспользовать alphaThreshold:, и это имеет некоторое значение для контура корабля, но, похоже, не влияет на контур спутника.

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

Мы также протестировали iOS 12 и iOS 13 с теми же результатами.«Канонический» код из книги имеет точно такую ​​же проблему.

Пожалуйста, смотрите нашу игру полная реализация на GitHub .

Быстрый способ воспроизвести проблему из нашей игры:

  1. Создать новый проект в Xcode с шаблоном игры
  2. Добавить спутниковый ресурс в каталог ресурсов:

satellite

Добавьте Color Sprite в GameScene.sks, выберите спутник для текстуры и установите тип тела "Альфа-маска" в разделе определения физики.

Результат в нашем случае выглядит следующим образом:

enter image description here

Ожидаемый результат - точное описание спрайта.

...