cocos2d в порядке iphone z - PullRequest
       19

cocos2d в порядке iphone z

5 голосов
/ 25 октября 2009

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

моя проблема - проблема z порядка, большинство моих спрайтов перекрываются, и когда вы касаетесь перекрывающихся спрайтов, тот, что позади (я думаю, с самым низким порядком z), реагирует вместо того, что впереди.

Мне нужно больше узнать о порядке z для cocos2d.

как изменить порядок z во время выполнения?

спасибо!

Ответы [ 3 ]

5 голосов
/ 03 ноября 2009

Z Заказ и сенсорная система обработки являются отдельными. Z Order предназначен только для визуального макета ваших слоев. Однако система обработки касаний зависит от приоритета, назначенного при регистрации в диспетчере касания. Если вы зарегистрируете два слоя в диспетчере касаний с одинаковым приоритетом, то второй слой получит касания первым, независимо от порядка слоев Z.

Вот часть, которая действительно смутила меня, когда у меня была такая же проблема. В то время как Z Order визуально ставит верхние числа друг на друга, с касаниями все наоборот. НИЖНИЕ приоритетные номера на самом деле первыми касаются. Чтобы сохранить свое здравомыслие, я реорганизовал свой код так, чтобы, по возможности, я в любом случае добавлял слои в том же порядке, что и индекс Z, чтобы касания верхних слоев вели себя интуитивно.

Когда это невозможно, я использую систему приоритетов касания и определяю константы, чтобы не запутаться позже. Для регистрации касаний с использованием системы приоритетов используйте следующее:

-(void) registerWithTouchDispatcher {
[[TouchDispatcher sharedDispatcher] addTargetedDelegate:self priority: DEFAULT_TOUCH_PRIORITY swallowsTouches:YES];

}

2 голосов
/ 25 октября 2009

Используете ли вы Touch Dispatcher, добавленный в 0.8?

Синглтон, который отправляет касания, как в v0.7.x (Стандарт) или одно касание за раз (Целевой). Преимущества использования нацеленных касаний состоят в том, что вы получаете только те события (начало, перемещение, конец, отмена) касания, на которое вы претендуете. Использование Targeted touchs упрощает работу с сенсорным кодом как в мультитач, так и в одно касание игр. Если вам не нужен сложный код обработки касаний, рекомендуется использовать целевые касания.

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

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

Пример теста Touches в проекте cocos2d, пожалуй, лучшее место для поиска: http://code.google.com/p/cocos2d-iphone/source/browse/trunk/tests/TouchesTest (особенно класс Paddle.m)

В методе onEnter вашего класса спрайтов вы можете установить приоритет диспетчера касания:

- (void)onEnter
{
    [[TouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:0 swallowsTouches:YES];
    [super onEnter];
}

Делегаты с более высоким приоритетом будут отвечать перед делегатами с низким приоритетом.

0 голосов
/ 02 ноября 2011

думайте об этом как о слоях бумаги. 1 будет сверху 0. 0 где-то выше -5. 16 выше 14. Вот и все, старшие числа располагаются поверх младших, независимо от того, используете ли вы отрицательные или положительные числа.

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