Создание любого данного экземпляра CCNode, реагирующего на прикосновение

Итак, в моем проекте я использую Cocos2D с CocosBuilder. Я назначил несколько своих персонажей подклассами CCNode с дочерними CCSprites и т. д.

Я хочу, чтобы эти CNodes реагировали на прикосновение — например, если я коснусь любого из них, они воспроизведут контекстно-зависимую анимацию. Я только хочу знать, как сделать узел реагирующим на прикосновение (или, возможно, иметь слой, реагирующий на прикосновение, который определяет, коснулись ли вы спрайта или нет), анимационная часть в порядке.

Любые идеи? Было бы здорово.

Сэм


person Sam P    schedule 16.05.2013    source источник


Ответы (1)


Оказывается, это довольно легко. В заголовочном файле вашего класса вы должны определить класс как реализующий протокол, например:

@interface Foo : CCNode <CCTouchOneByOneDelegate>
{

}

и вы должны реализовать onEnter и onExit следующим образом:

- (void)onEnter
{
    [[[CCDirector sharedDirector] touchDispatcher] addTargetedDelegate:self priority:0 swallowsTouches:YES];
    [super onEnter];
}
- (void)onExit
{
    [[[CCDirector sharedDirector] touchDispatcher] removeDelegate:self];
[super onExit];
}

и вы должны реализовать ccTouchBegan (если вы используете OneByOneDispatcher)

person Sam P    schedule 22.05.2013
comment
Потрясающий. Никогда не слышал о протоколе CCTouchOneByOneDelegate, и это здорово. - person Almo; 24.05.2013
comment
Теперь он называется CCTargetedTouchDelegate. Тем не менее, это то, что нужно для работы! - person Almo; 24.05.2013
comment
Хм? Они изменились с CCTargetedTouchDelegate на CCTouchOneByOneDelegate. Если вы перейдете с Cocos2D до версии 2.1 на любую из последних, вы заметите, что CCTargetedTouchDelegate не работает. - person Sam P; 26.05.2013
comment
О, я думал, что у меня последняя версия Cocos2d, так как я скачал последнюю стабильную версию пару недель назад. Спасибо за информацию. :) - person Almo; 26.05.2013