Как повторить действие при нажатой кнопке MenuItem?(Cocos2d) - PullRequest
0 голосов
/ 27 июля 2011

Как повторить действие при нажатой кнопке MenuItem?Я попытался сделать подкласс на CCMenuItemImage и сделал

@implementation CCMenuItemSpriteHoldable

@synthesize buttonHeld;

-(void) selected
{
[super selected];
buttonHeld = true;
}
-(void) unselected
{
[super unselected];
buttonHeld = false;
}

@end

и поместил это в мой init

CCMenuItem *upButtonItem = [CCMenuItemSpriteHoldable
                            itemFromNormalImage:@"up.png" selectedImage:@"upsel.png"
                            target:self selector:@selector(upButtonTapped:)];

, но ничего не сделал ... :( он просто загружает (void)upButtonTapped, когда я отпускаю кнопку. Есть ли способ сделать кнопку, которая позволяет вам удерживать нажатой кнопку?

Спасибо

Ответы [ 2 ]

2 голосов
/ 28 июля 2011

Вы должны добавить CCSprite в CCLayer, реализовать сенсорный CCLayer перехват (начало, перемещение, окончание), когда пользователь коснется вашего CCSprite (используя [yourSprite boundingBox]), и запустить нажатие селектора: когда пользователь коснется начала над вашим Кнопки CCSprite и внеплановый селектор на ощупь закончились!

N.B. отмените планирование нажатого: селектора, если касание перемещено касанием выхода из вашей кнопки CCSprite ограничивающий прямоугольник

0 голосов
/ 23 марта 2012

Я могу ответить только за Cocos2dX, но это должен быть тот же механизм.Реализовать эту функцию немного нелепо, поэтому я предлагаю вам пойти по пути создания подкласса Sprite и добавить к нему CCLayerTouch.

Но если вы хотите использовать CCMenuItem, я могу сказать вам, где вы должны начать искать.Каждый раз, когда пользователь касается CCMenuItem- (Node), класс проверяет, к каким дочерним элементам обращались, и устанавливает его для выбранных.Когда вы отпускаете палец, он устанавливает его обратно в невыбранное и запускает селектор (действие), назначенный вам.Это однократное действие.

Два способа теперь:

  1. Для того, чтобы он все время срабатывал, вам нужно создать подкласс CCMenuItem и переопределить четыре сенсорных обратного вызова(без звонка супер).В прикосновении вы регистрируете свой спрайт как прикосновенный, а в касании вы отменяете его регистрацию.Вашему классу также нужен метод update (), который будет вызываться каждый кадр в цикле выполнения.В этом методе update () вы проверяете, коснулся ли спрайт, и если да, вы запускаете.Это подход в менее кокосовом стиле.

  2. Как упоминалось выше.Зарегистрируйте планировщик и отмените регистрацию после завершения касания.

В этом случае метод перемещения перемещением ничего не делает.А методы touchCancelled ведут себя как touchEnded.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...