Cocos2d обрабатывает несколько слоев

Я был занят несколько дней, пытаясь понять, как обрабатывать прикосновения в моем проекте Cocos2d. Ситуация немного иная, чем обычно. У меня есть несколько разных игровых слоев, на которых есть элементы, которыми мне нужно управлять касанием:

  • ControlLayer: удерживает элементы управления игрой. (движение, кнопка действия). Этот слой находится сверху.
  • GameplayLayer: Удерживает игровые объекты. (CCSprites). Этот слой находится непосредственно под ControlLayer.

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

Информация, которую я собрал до сих пор, наводит меня на мысль, что мне нужно получить весь свой сенсорный ввод с уровня управления. Затем мне нужно каким-то образом «каскадировать» информацию касания в GameplayLayer, чтобы я мог обрабатывать ввод там. Другой вариант - получить информацию CGRect из моих спрайтов, каким-то образом создав массив с указателями на объекты, которые должны быть осязаемы. Я должен иметь возможность использовать эту информацию в ControlLayer для проверки каждого элемента в этом списке, касался ли этот элемент.

Как лучше всего это сделать, и как мне это реализовать? Я как бы новичок в программировании с помощью какао и Objective C, поэтому я не совсем уверен, какой вариант лучше всего подходит для этого языка и как получить доступ к информации CGRect спрайтов ([mySpriteName boundingBox]) в другом классе, а затем на уровне визуализировано в.

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

То, что у меня есть (для проверки), таково: Я не писал этого, но поначалу это показалось довольно крутой идеей.

Однако проблема возникает, если Foo.DoWork генерирует исключение. Когда генерируется исключение, вполне вероятно, что мы находимся в несогласованном состоянии, что означает, что InvariantChecker также выдает, скрывая исходное исключение. Это может происходить несколько раз, поскольку исключение распространяется вверх по стеку вызовов, с InvariantChecker в каждом кадре, скрывающим исключение из кадра ниже. Чтобы диагностировать проблему, мне пришлось отключить бросок в InvariantChecker , и только тогда я смог увидеть исходное исключение.

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

6
задан JSBձոգչ 7 March 2011 в 16:42
поделиться