Изменить опорную точку Box2D?

В Cocos2D я создаю свои CCSprites с опорными точками (0,1), что похоже на то, как это делает UIKit. В любом случае, я пытаюсь изменить точку привязки в Box2D, возможно ли это? Если да, то как бы я сделал это с точкой привязки (0,1)?

Спасибо!


person SimplyKiwi    schedule 06.11.2011    source источник


Ответы (2)


Тела Box2D не имеют точки привязки.

AnchorPoint — это смещение текстуры узла относительно положения узла. У тел Box2D нет текстуры, следовательно, нет точки привязки.

Вообще говоря, вы собираетесь усложнить многие вещи, изменив положение anchorPoint по умолчанию 0,5,0,5. Как, например, проблема, которая заставила вас задать этот самый вопрос.

person LearnCocos2D    schedule 06.11.2011
comment
Хм, я пробежал по этой ссылке: box2d.org/forum /viewtopic.php?f=3&t=3612&p=17877#p17877 И они говорят, что это возможно, поэтому после того, как вы посмотрите на эту ссылку, вы думаете, что это все еще возможно? - person SimplyKiwi; 06.11.2011
comment
Да, вы можете смещать фигуры, но для этого нет простого свойства, и вам придется добавлять это смещение к каждому телу Box2D, чтобы оно соответствовало смещению anchorPoint соответствующего спрайта. Будет намного проще просто придерживаться cocos2d anchorPoint как есть, чем пытаться заставить cocos2d вести себя как UIKit. См. также это объяснение: анимация фигурных точек или что-то еще"> stackoverflow.com/questions/7808981/ - person LearnCocos2D; 07.11.2011
comment
Я понимаю. Это было очень хорошее объяснение. Поэтому, если я использую обычную опорную точку 0,5,0,5, я испорчу положение своего спрайта, потому что привык к UIKit. Есть ли способ преобразовать координаты положения UIKit в координаты Cocos2D? - person SimplyKiwi; 07.11.2011
comment
Вы можете преобразовать координату uikit в cocos2d следующим образом: node.position = CGPointMake(uikitPos.x + node.contentSize.width * node.anchorPoint.x, uikitPos.y - node.contentSize.height * node.anchorPoint.y); Возможно, вы захотите обернуть это во вспомогательный метод или метод категории CCNode. - person LearnCocos2D; 07.11.2011
comment
Спасибо! Я обязательно это сделаю и оставлю точку привязки на .5, .5. Спасибо за помощь и принятый ответ! - person SimplyKiwi; 07.11.2011

Изменение точки привязки фигур в теле:

выполните цикл for, чтобы получить наименьшую вершину x и наибольшую, вычтите, чтобы получить ширину, вы можете сделать в том же цикле, чтобы получить наименьшую вершину y и наибольшую и вычесть,

если вы затем переместите все вершины с различиями, вы разместите фигуру в 0,0.

это работает, не уверен, что это лучшее решение.

person freezing_    schedule 15.04.2014