Действие на прессу CCMenuItem. не нажимать - PullRequest
1 голос
/ 20 февраля 2012

Я разрабатываю приложение на cocos2d.Я слышал, что рекомендуется сделать мои элементы управления, используя класс CCMenu.Итак, я сделал кнопку, установил цель и селектор.Но селектор сработал только тогда, когда я отжал кнопку.как я могу вызвать его в тот момент, когда я нажал кнопку?

#import "Button.h"

@implementation Button

+ (id)buttonWithImage:(NSString*)file atPosition:(CGPoint)position target:(id)target selector:(SEL)selector {
    CCMenu *menu = [CCMenu menuWithItems:[ButtonItem buttonWithImage:file target:target selector:selector], nil];
    menu.position = position;
    return menu;
}
@end

@implementation ButtonItem

+ (id)buttonWithImage:(NSString*)file target:(id)target selector:(SEL)selector {
    return [[[self alloc] initWithImage:file target:target selector:selector] autorelease];
}


- (id)initWithImage:(NSString*)file target:(id)target selector:(SEL)selector {
    if(self = [super initWithTarget:target selector:selector]) {

        back = [[CCSprite spriteWithFile:@"DPad_BG.png"] retain];
        back.anchorPoint = ccp(0,0);
        backPressed = [[CCSprite spriteWithFile:@"DPad_BG.png"] retain];
        backPressed.anchorPoint = ccp(0,0);
        [self addChild:back];

        self.contentSize = back.contentSize;

        CCSprite* image = [CCSprite spriteWithFile:file];
        [self addChild:image z:1];
        image.position = ccp(self.contentSize.width / 2, self.contentSize.height / 2);

    }
    return self;
}

-(void) selected {
    [self removeChild:back cleanup:NO];
    [self addChild:backPressed];
    [super selected];
}

-(void) unselected {
    [self removeChild:backPressed cleanup:NO];
    [self addChild:back];
    [super unselected];
}

// this prevents double taps
- (void)activate {
    [super activate];
    [self setIsEnabled:NO];
    [self schedule:@selector(resetButton:) interval:0.5];
}

- (void)resetButton:(ccTime)dt {
    [self unschedule:@selector(resetButton:)];
    [self setIsEnabled:YES];
}

- (void)dealloc {
    [back release];
    [backPressed release];
    [super dealloc];
}

@end

Ответы [ 4 ]

3 голосов
/ 12 июля 2012

Вот метод, который я добавил к пунктам меню Cocos2d

CCMenuItemSprite* btn = [CCMenuItemSprite itemWithNormalSprite:sprite1 selectedSprite:sprite2 block:^(id sender) {
    //TODO: do stuff on release
}];
[btn setPressBlock:^(id sender) {
    //TODO: do stuff on press
}];

Ссылка на коммит Github с дополнительной копией блока для действия при нажатии

1 голос
/ 24 февраля 2012

Тот факт, что метод запускается при отпускании кнопки, делает его более приятным для пользователя, поскольку некоторые люди могли нажать кнопку, осознав, что это не та кнопка, которую они хотели нажать, а затем перейти в другую область.экрана перед выпуском.Таким образом, на самом деле не рекомендуется запускать метод при нажатии кнопки.

0 голосов
/ 14 июля 2012

Для создания меню вы попробуйте этот код ..

CCMenuItemImage *Item = [CCMenuItemImage itemWithNormalImage:@"yourImage.png" selectedImage:@"yourSelectedImage.png" target:self selector:@selector(clicked)];
CCMenu *Menu = [CCMenu menuWithItems:Item, nil];
[self addChild:Menu];
0 голосов
/ 24 февраля 2012

Единственное, что мне нужно, это поместить [super activate]; в -(void) selected и удалить его из - (void)activate

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