Получение абсолютной позиции 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
Возможно, это решение кому-то поможет, а может, кто-то объяснит, почему это решение работает, а не другое.