cocos2d convertToWorldSpace - PullRequest
       3

cocos2d convertToWorldSpace

5 голосов
/ 18 февраля 2011

Я не уверен, что convertToWorldSpace работает.

  • У меня есть spriteA, который является родителем.

  • Например, я установил его в положение 40,40 и добавил к сцене.

  • У меня есть второй спрайт B, который я установил в позицию 80,80.

  • Я добавляю spriteB к spriteA.

  • Я распечатаю позицию спрайта B: 80,80.

  • Затем я печатаю [self convertToWorldSpace: spriteB.position]. И я все еще получаю 80,80. Разве позиция spriteB здесь не должна быть другой?

Ответы [ 2 ]

11 голосов
/ 20 февраля 2011

В вашем случае, если вы хотите узнать положение вашего spriteB в текущем мире, вы должны вызвать методы "convertToWorldSpace" из его родителя (spriteA):

[spriteA convertToWorldSpace: spriteB.position];

Метод "convertToWorldSpace:" применяет преобразование узла к заданной позиции.Вы должны всегда вызывать эти методы из родительского спрайта.

2 голосов
/ 03 ноября 2014

ConvertToWorldSpace берет локальные координаты узла и преобразует их в мировые координаты. ConvertToNodeSpace принимает МИРОВЫЕ координаты, преобразует их в координаты вызывающего узла. (Если это так, вызовите [nodeA convertToWorldSpace:ccp(10,10)], предполагается, что позиция (10,10) относится к дочернему элементу узла A)

По сути, чтобы получить мировую позицию любого узла (в cocos2d 3 или новее), используйте этот код:

CGPoint worldPosition=[node.parent convertToWorldSpace:node.positionInPoints];

Я лично создал функцию, чтобы использовать ее снова и снова (добавьте ее в начало любого файла .m / .h, и вы увидите ее)

static inline CGPoint
worldPosOfNode(CCNode *node){
    return [node.parent convertToWorldSpace:node.positionInPoints];
}

И я использую это так: (myNode может быть любым спрайтом, ярлыком или любым другим пользователем cocos2d)

CGPoint worldPosition=worldPosOfNode(myNode);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...