Вопрос по ios, xcode, objective-c – Получение абсолютной позиции CCSprite в cocos2d

4

В моей игре у меня естьCCSprite что вращается вокруг другогоCCSpriteочень похоже на электрон, вращающийся вокруг ядра. У меня есть электрон, как дитя ядра, чтобы сделать анимацию намного проще. Все, что мне нужно сделать, это повернуть ядро, и электрон следует за набором довольно хорошо.

Тем не менее, моя проблема возникает из-за того, что анимация орбиты должна казаться немного загадочной, либо добавляя что-то вроде следа системы частиц, либо эффект ленты, следуя пути электрона. Я не могу просто добавить систему частиц к самому электрону, потому что частицы не следуют правильно, поскольку они также вращаются ядром. Если я добавлю систему частиц вselfзатем они отображаются правильно, но не в том же положении, что и объект, который они должны идти.

У меня вопрос такой:

Есть ли способ получить положение объекта в сцене, скажем, электрон, в отличие от того, чтобы иметь доступ только к его положению относительно его родителя?

Благодарю.

Ваш Ответ

2   ответа
4

Когда вы делаете:

[aSprite convertToWorldSpace:position];

Вы фактически получаете глобальные координаты позиции в системе координат Sprite. Если вы хотите перевести позицию aSprite в глобальное пространство, вам нужно попросить, чтобы его родитель выполнил перевод за вас, потому что sprite.position уже находится в его родительской системе координат.

Надеюсь, это объясняет

Оригинальный ответ:

Для меня это решение не сработало

У меня была двухуровневая иерархия, где mySprite - это потомок CCSprite, который является потомком сцены.

Итог: этот код исправил проблему для меня:

CGPoint worldCoord =  [[mySprite parent]convertToWorldSpace: mySprite.position];

Это иерархическая структура, которая требовала моего решения: myScene - & gt; mySpriteParent - & gt; MySprite

mySprite.position:29,254
mySpriteParent.position:533,57

Решение1 - неверный результат:

[mySprite convertToWorldSpace: mySprite.position]:91,418

Solution2 - правильный результат:

[[boxSprite parent] convertToWorldSpace:boxSprite.position]:253.5,275.5

Возможно, это решение кому-то поможет И, может быть, кто-то объяснит, почему это решение работает, а не другое

+1 Этот ответ лучше :-)
8

Каждый CCNode и его потомки имеют возможность получить позицию относительно сцены:

CGPoint worldCoord = [mySprite convertToWorldSpace: mySprite.position];

Эта worldCoordinate будет относиться к сцене, а не к родительскому узлу!

Надеюсь, это помогло! ^ _ ^

любить это! собираюсь попробовать это сейчас. Спасибо! GreenWire
Это замечательно, чтобы получить позицию, но как я могу определить, что позиция изменилась (согласно физическому движку)? Кажется, что переопределениеsetPosition: не делает этого. : \
прекрасный!! Большое спасибо, работает отлично. GreenWire

Похожие вопросы