Как выровнять спрайт по центру?

В cocos2d кто-нибудь знает, как центрировать спрайт? Прямо сейчас у меня есть спрайт, который перемещается туда, где вы касаетесь экрана. Проблема в том, что спрайт выровнен по нижнему левому углу. Это означает, что вместо того, чтобы двигаться вниз, если вы слегка коснетесь нижней части, спрайт будет двигаться вверх. Заранее спасибо!

Вот мой код...

(BOOL) ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *) event {
    UITouch *touch = [touches anyObject];
    CGPoint point = [touch locationInView: [touch view]];

    [mainSprite do:[MoveTo actionWithDuration:0.5 position:ccp(point.x, 480 - point.y)]];

    return YES;
}

person Community    schedule 17.05.2009    source источник


Ответы (2)


Якорь преобразования по умолчанию для спрайтов в Cocos2D — это центр спрайта, поэтому он должен двигаться так, чтобы центр спрайта оказывался в месте касания, как у вас сейчас. Вы изменили привязку преобразования спрайта?

Единственное, о чем я могу думать, это то, что если ваш mainSprite является дочерним элементом другого CocosNode, вам может потребоваться преобразовать координаты касания в пространство узла, используя этот метод:

- (CGPoint)convertToNodeSpace:(CGPoint)worldPoint;

... на родительском узле. Однако я сомневаюсь, что это проблема. Извините, если это бесполезно.

РЕДАКТИРОВАТЬ: OP, если вы читаете это, какую версию Cocos2D вы используете? Я считаю, что 0.8 (в настоящее время в транке svn) меняет способ работы привязки; для дальнейшего использования другим может быть полезно знать, с чем вы работаете.

person Mitch Lindgren    schedule 17.05.2009

У меня это работает! Для тех, кто хочет знать, вот код...

[mainSprite setTransformAnchor:ccp(24.0, 64.5)];

24 это половина ширины спрайта

64,5 — это половина высоты спрайтов.

person Community    schedule 17.05.2009