0

在我的 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];
}

// THIS IS WHERE ALL OF EFFECTS SHOULD 的地方是我想让所有东西都变成蓝色的地方。现在,我计划通过将 Blue 类中的实例变量设置为 YES 来做到这一点。

在处理主要播放器的 1. 帧、2. 背景和 3. 平台帧的方法中,我有一个 if 语句检查 Blue 类的实例变量是 YES 还是 NO 并相应地执行。但是,我不知道如何在我的平台和播放器类中使用 Blue 类中的实例变量,而且我也不是 100% 确信这是实现通电的最佳方式。

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

去iOS!

4

1 回答 1

0

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

Objective C 对象本质上是 C 结构。这意味着->操作员在他们身上工作。在这种情况下,您可能想使用blue->blueCalled,您的类blue的实例在哪里。Blue

可见性是这项工作(或失败)的关键。仅当 iVar@interface在头文件中声明而不遵循 and @privateor@protected声明时,才能使用此选项。

于 2013-11-07T22:37:06.170 回答