SKLabelNode PhysicsBody Issue - PullRequest
       163

SKLabelNode PhysicsBody Issue

0 голосов
/ 04 мая 2020

Игра Супертип невероятна.
Я думал о создании приложения, похожего на него. Есть ли какой-нибудь простой способ превратить текст SKLabelNode в физическое тело?

Например, я хочу, чтобы буква «А» стала буквальным физическим телом
- Есть ли упрощение c способ достичь этого без необходимости фактически определять каждый cgPath?
- я думаю, я мог бы сделать 'A' узлом SKSpriteNode, но это кажется плохим.

Кроме того,
У меня было много проблемы превращения узлов SKSprite в физические тела. Я легко могу превратить одно изображение в физику тела, но если это изображение разделено невидимыми сегментами, все тормозит. Swift выбирает определенный c сегмент, чтобы стать физическим телом.
• Я также очень расстроен, так как вы не можете определить вогнутую форму и сделать физическое тело. Но вы можете получить вогнутые смежные образы, которые станут красивыми физическими телами.

Last ,,
Было бы очень хорошо, если бы слово превратилось в физическое тело, а с помощью логического значения определите его как распадающееся или держаться вместе. Есть ли способ сделать это?
(я думаю, я могу сделать это, объединяя их массив в инициализации: [SKPhysicsBody])

1 Ответ

1 голос
/ 04 мая 2020

A SKLabelNode не имеет физического тела, поэтому вы не можете применить физику непосредственно к нему. Что вы можете сделать, это создать их как набор SKSpriteNodes и назначить изображение каждой буквы для текстуры тела.

Чтобы "включить и выключить физическое тело", вы должны переключить свойство узла isDynamic. Для других эффектов вы можете поиграть со свойством affectedByGravity, битовой маской коллизии и контакта, в зависимости от того, что вы хотите.

Чтобы коллизия выглядела более реальной, вы можете использовать SKPhysicsContactDelegate, чтобы вы могли автоматически «нарисуйте» физическое тело с точной формой букв. Примерно так:

letterNode.physicsBody = SKPhysicsBody(texture: letterTexture, alphaThreshold: 1.0, size: letterTexture.size())

Чтобы справиться со столкновениями и контактами, не забудьте установить contactDelegate в вашей сцене, например:

self.physicsWorld.contactDelegate = self
...