Cocos2D Touch с параллаксом - PullRequest
       36

Cocos2D Touch с параллаксом

0 голосов
/ 21 декабря 2011

У меня есть несколько слоев и я добавил к ним несколько спрайтов; Попытка получить к ним доступ таким образом:

-(void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [touches anyObject];
    CGPoint location = [touch locationInView:[touch view]];
    location = [[CCDirector sharedDirector] convertToGL:location];

    if(CGRectContainsPoint([[self getChildByTag:tagNumber] boundingBox], location)) {
        CCLOG(@"You've touched the sprite!");
    }
}

странно то, что если у вас нет этого метода:

-(BOOL) ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event
{
    return YES;
}

мое приложение зависло, когда я касался экрана. Есть идеи, что может быть?

UPDATE:

-(void) registerWithTouchDispatcher
{
    [[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self 
                                                     priority:0 swallowsTouches:YES];
}

Ответы [ 2 ]

1 голос
/ 21 декабря 2011

Если вы получаете событие ccTouchBegan, но не ccTouchesBegan (обратите внимание на множественное число), вы используете протокол CCTargetedTouchDelegate . Вероятно, вы зарегистрировали свой класс в CCTouchDispatcher addTargetedDelegate и, следовательно, должны придерживаться протокола CCTargetedTouchDelegate, методы которого являются единственными версиями ccTouchXXXX, а не ccTouchesXXXX.

Вы также должны учитывать предупреждения, которые Xcode показывает вам. Если вы не реализуете ccTouchBegan, я уверен, что может появиться предупреждение «может не отвечать селектору». Все предупреждения следует воспринимать серьезно (на самом деле настолько, что я рекомендую включить «Обрабатывать все предупреждения как ошибки»).

0 голосов
/ 21 декабря 2011

Какие-либо ошибки в консоли?Что-то о нераспознанном селекторе?Прошло много времени с тех пор, как я работал с cocos2D, но вы должны проверить, переопределяет ли второй метод первый.Если это действительно так, то, когда она не существует, ваша программа будет использовать первую (ту, которая возвращает void), таким образом, наткнувшись на фактическую ошибку в реализации кода.Я бы установил точку останова внутри первой строки '- (void) ccTouchesBegan: (NSSet *) касается события eventEvent: (UIEvent *)', удалил функцию, которая возвращает BOOL, и затем я бы шаг за шагом увидел, что произойдет, когдаиспользуя отладчик.

И, пожалуйста, опубликуйте свой консольный журнал.Я считаю, что у вас должна быть проблема «селектор не найден», «дочерний элемент не найден» или «исключение недопустимого аргумента из-за нулевого аргумента».

Просто мысль.

...