Cocos2d: один слой поверх другого - возможно ли временно деактивировать касания для определенного слоя / региона? - PullRequest
0 голосов
/ 23 ноября 2010

У меня есть сцена, где есть кнопка. Как только я нажимаю кнопку, с левой стороны выдвигается прямоугольный спрайт: http://img255.imageshack.us/img255/9867/slidei.png

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

Можно ли временно деактивировать прикосновения для определенного слоя в сцене? Имеет ли прямоугольная форма сам по себе объект CCLayer?

Я знаю, что могу создать новую сцену для этой фигуры с прозрачным фоном, НО я все еще хочу, чтобы кнопка реагировала на прикосновения:

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

Ответы [ 2 ]

2 голосов
/ 23 ноября 2010

Зависит от того, используете ли вы реальные объекты кнопок или регионы CGRect, на которые реагирует ваш метод touchesBegan. Я согласен с GamingHorror в том, что самым чистым подходом будет включение / отключение объектов-кнопок напрямую по мере необходимости.

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

Перед тем, как он вставит, вы можете отключить все касания пользователя с помощью:

[[[UIApplication sharedApplication] keyWindow] setUserInteractionEnabled: NO];

После того, как ваш вид передвинется, вам может понадобиться установитьUserInteractionEnabled: YES для этого конкретного представления. Когда он выдвинется, вы можете положить все обратно с помощью

[[[UIApplication sharedApplication] keyWindow] setUserInteractionEnabled: YES];

0 голосов
/ 23 ноября 2010

Как и в любом пользовательском интерфейсе, вы должны сообщить объектам, включены они или нет. Лучше всего на самом деле отправить сообщение кнопке с указанием включить или выключить ее.

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

...