Доступ к переменной экземпляра из другого класса для проекта cocos2d?

В моей игре cocos2d у меня есть своего рода «усиление», когда после достижения персонаж становится синим, платформа становится синей, как и фон. Я не уверен, что реализую это наилучшим образом, поэтому, если у вас есть другие предложения, поделитесь! :)

Я создал класс Blue с переменной экземпляра blueCalled.

Я импортировал этот класс как в свой класс «Платформа», так и в класс «Игрок».

Код блокировки бонусов и игроков находится внутри моего класса Platform. Это код при нажатии на бонусы:

    // try remove powerup
- (void) tryRemovePowerup
{
    NSMutableArray * currentPowerUpArray = [self getcurrentPowersArr];

    if(currentPowerUpArray)
    {
        int playerY = ((CCLayer*)(self.player)).position.y;
        for(int x=0; x<[currentPowerUpArray count];x++)
        {
            CCSprite *powerup = [currentPowerUpArray objectAtIndex:x];

            if(abs(powerup.position.x+powerup.parent.position.x-[Player initX])<50)
            {
                if(abs(powerup.position.y+blueberry.parent.position.y-playerY)<30 && powerup.visible && powerup.visible)
                {
                    [power.parent powerup cleanup:YES];

                    CGSize winSize = [[CCDirector sharedDirector] winSize];
                    [[SimpleAudioEngine sharedEngine] playEffect:@"yay.wav" pitch:1 pan:0 gain:1];
                    // THIS IS WHERE ALL OF EFFECTS SHOULD HAPPEN
                    NSLog(@"powerup hit");

                }
            }
        }
    }


    [self hitTestOB];
}

Место // ЭТО ГДЕ ДОЛЖНЫ ПРОИЗВОДИТЬСЯ ВСЕ ЭФФЕКТЫ - это то место, где я хочу сделать все синим. Прямо сейчас я планирую сделать это, установив для переменной экземпляра в классе Blue значение YES.

В методах, которые обрабатывают 1. кадры основного проигрывателя, 2. фон и 3. платформенные кадры, у меня есть оператор if, проверяющий, имеет ли переменная экземпляра класса Blue значение YES или NO, и он действует соответственно. Однако я не знаю, как использовать переменную экземпляра из класса Blue в моей платформе и классе игрока, а также я не уверен на 100%, что это лучший способ реализовать усиление.

Спасибо за любую помощь, которую вы можете мне оказать :)

Перейти на iOS!


person Surz    schedule 07.11.2013    source источник
comment
вы можете найти это полезным: learn-cocos2d.com/ файлы / cocos2d-essential-reference-sample /   -  person LearnCocos2D    schedule 08.11.2013


Ответы (1)


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

Объекты Objective C по своей сути являются структурами C. Это означает, что с ними работает оператор ->. В этом случае вы захотите использовать blue->blueCalled, где blue - это экземпляр вашего Blue класса.

Видимость - ключ к этой работе (или к неудаче). Вы можете использовать это только в том случае, если iVar объявлен в @interface в файле заголовка, а не после объявления @private или @protected.

person Holly    schedule 07.11.2013