Получение абсолютной позиции CCSprite в cocos2d

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

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

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

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

Благодарю.

2 ответа

Решение

Да, есть!

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

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

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

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

Более позднее редактирование:

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

[aSprite convertToWorldSpace:position];

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

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


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

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

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

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

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

Это иерархическая структура, которая требовала моего решения: myScene -> mySpriteParent -> 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

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

Другие вопросы по тегам