Есть ли способ установить смещение между SKSpriteNode и его физическим телом?

Я создаю игру, в которой пользователь управляет кубом (50x50px) и может собирать больше кубов, исследуя и собирая кубы, добавленные к случайной стороне текущих кубов пользователей.

Пользовательский стартовый куб

http://s7.postimg.org/id95wms7r/cube.png

После того, как пользователь собрал еще несколько кубиков

http://s13.postimg.org/oo9v4c9bb/morecubes.png

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

Вот как выглядит мой код. И игрок, и кубы находятся в CGPointZero в своих собственных системах координат.

Игрок: SKNode

-- Кубы: SKSpriteNode

physicsBody = SKPhysicsBody(texture: cubes.texture, size: accumulatedSize)
physicsBody?.dynamic = true
physicsBody?.mass = 2.0
physicsBody?.allowsRotation = false

person Aderae    schedule 27.02.2015    source источник
comment
попробуйте установить для anchorPoints значение 0.5,0.5   -  person    schedule 27.02.2015


Ответы (1)


Вместо создания SKPhysicsBody из текстуры создайте SKPhysicsBody для каждого отдельного куба, затем поместите все эти отдельные тела в массив, а затем создайте SKPhysicsBody из тел в этом массиве, используя:

  • (SKPhysicsBody *) bodyWithBodies: (NSArray *) тела

Это даст вам более точное тело со спрайтом.

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

person Joaquin Llaneza    schedule 27.02.2015