从cocos2d项目的另一个类访问实例变量?

时间:2013-11-07 22:21:07

标签: ios objective-c cocos2d-iphone instance-variables

在我的cocos2d游戏中,我有各种各样的“通电”,一旦达到,角色变为蓝色,平台变为蓝色,背景也是如此。我不确定我是否以最好的方式实现这一点,所以如果你有其他建议请分享!:)

我创建了一个类 Blue ,它有一个名为 blueCalled 的实例变量

我将这个类导入了我的“Platform”类和我的“Player”类。

powerup和玩家碰撞代码在我的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来实现此目的。

在处理主播放器,2。背景和3.平台帧的1.帧的方法中,我有一个if语句检查Blue类的实例变量是YES还是NO并且它起作用因此。 但是,我不知道如何在我的平台和播放器类中使用Blue类中的实例变量,我也不是100%确信这是实现启动的最佳方法。

感谢您提供给我的任何帮助:)

去iOS!

1 个答案:

答案 0 :(得分:0)

作为一般规则,如果要访问另一个对象的iVar,则应该创建一个属性来访问它。这不是该规则的例外,但我会告诉你如何做到这一点。

目标C对象本质上是C结构。这意味着->运算符可以处理它们。在这种情况下,您可以使用blue->blueCalled,其中blue是您的Blue类的实例。

可见性是这项工作(或失败)的关键。如果iVar在头文件中的@interface内声明,而不是跟随@private@protected声明,则只能使用此方法。