Это может потребовать небольшого количества объяснения, но здесь, действительно, буду признателен за любую проницательность.
Краткая версия: Как я могу создать TouchableButton (который самостоятельно обнаруживает касания), чье изображение CCSprite является дочерним по отношению к CCSpriteBatchNode в другом классе? (Обычно CCSprite является дочерним элементом самого TouchableButton).
Длинная версия:
Я создаю игру, используя Cocos2d. Игра фокусируется на ландшафте (класс EnvironmentView: CCLayer), заполненном агентами (класс AgentView: CCNode), которые бегают и взаимодействуют друг с другом.
EnvironmentView поддерживает список объектов AgentView и создает / уничтожает их по мере необходимости (в зависимости от того, как они взаимодействуют).
Каждый AgentView имеет CCSprite @property, который добавляется как дочерний элемент для CCBatchNode (@property of EnvironmentView), который добавляется как дочерний элемент для EnvironmentView.
Я пытаюсь реализовать функцию, с помощью которой пользователи могут касаться агентов и перемещать их из одного места в другое в ландшафте.
Поскольку в EnvironmentView перемещается много агентов, я не хочу использовать стандартный подход для определения местоположения касания и прохождения всех CCSprites AgentView, чтобы увидеть, касается ли касание одного из них (это замедлит частоту кадров). значительно, пожалуйста: не заинтересованы в ответах, продвигающих этот подход).
Вместо этого я хотел бы превратить каждый AgentView в сенсорный узел (узел, который знает, когда к нему прикоснулись, а не узел, который сообщает, когда к нему прикоснулись (подход, упомянутый выше)).
По сути, я хотел бы заменить или дополнить CCSprite каждого AgentView каким-либо объектом TouchableButton.
Я использую класс (назовем его TouchableButton), который использует этот подход для кнопок, связанных с пользовательским интерфейсом, в моей игре, они знают, когда к ним прикасаются, без реализации каких-либо методов CCTouchesBegan на их родительском уровне. Но я не смог адаптировать TouchableButton для этого варианта использования, вот почему:
TouchableButtons принимают CCSprite в качестве параметра init. Этот CCSprite устанавливается как сенсорная часть кнопки и добавляется как дочерний элемент самой кнопки. Поскольку я также добавляю CCSprite в качестве дочернего элемента для CCSpriteBatchNode в EnvironmentView, я получаю сообщение об ошибке (не могу дважды добавить что-либо в качестве дочернего для двух разных родительских объектов). Как я могу структурировать вещи, чтобы избежать этого конфликта?
Заранее спасибо за любую помощь!