Cocos2d обрабатывает контакт с несколькими уровнями

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

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

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

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

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

    То, что я пока (для проверки), вот что: ControlLayer.m

    - (void)ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [touches anyObject];
    CGPoint location = [touch locationInView: [touch view]];
    
    CGRect rect = CGRectMake(0.0f, 0.0f, 100.0f, 100.0f);
    
    //Tried some stuff here to get see if I could get a sprite by tagname so I could use it's bounding box but that didn't work
    
    // Check for touch with specific location
    if (CGRectContainsPoint([tree boundingBox], location)) {
        CCLOG(@"CGRect contains the location, touched!");
    }
    
    CCLOG(@"Layer touched at %@", NSStringFromCGPoint(location));
    

    }

    Заранее спасибо за помощь!

    19
    задан James Webster 4 September 2013 в 15:03
    поделиться