在cocos2d中实现powerUps来改变整个游戏状态?

时间:2013-11-08 19:04:58

标签: iphone objective-c cocos2d-iphone

我最近问了一个问题,那就是涉及实施强化措施;但是,我已经决定以不同的方式去做。

在我的游戏中,我有一个无尽的滚动背景,主角在收集硬币时向右移动。

当玩家击中蓝色硬币时,上电,我想要1.角色变为蓝色(我有相应的帧),2。背景变蓝,以及3.平台改变蓝色(有图像);我希望所有这些因素都能持续20秒。

我打算通过蓝色类和蓝色实例变量(公共变量)来实现这一点,我将其设置为YES,并相应地设置为NO(如果是蓝色硬币)在我的其他类(Platform类,Player类)中被击中了。但是,它没有效率,并且在我加入计时器时不起作用。

有没有人知道如何实施上电?

这是我的代码,当玩家击中蓝色硬币时:

    // try remove blue coin
    - (void) tryRemoveBluecoin
    {
    NSMutableArray * currentBluecoinArray = [self getcurrentBluecoinArr];

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

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

                    CGSize winSize = [[CCDirector sharedDirector] winSize];
                    [[SimpleAudioEngine sharedEngine] playEffect:@"jump.wav" pitch:1 pan:0 gain:1];

                    // SET BLUE VARIABLE TO YES

                    NSLog(@"BEGIN BLUE POWER UP EFFECTS FOR 20 SECONDS");

                }
            }
        }
    }


    [self hitTestOB];
}

感谢您的任何想法!

1 个答案:

答案 0 :(得分:0)

现在,自从我上次使用Cocos2d以来已经有一段时间了,但是你知道你可以实际为节点设置颜色信息,对吗?这听起来像是一种更明智的方式。设计你的精灵时要记住这一点,并保留一个数组,其中包含你需要着色的所有元素。

根据您的游戏状态定义新颜色的方法,游戏状态枚举可以与您的加电中的NSInteger属性匹配。     ccColor3B颜色;

// _state being an NSInteger ivar
// the different states defined in an enum

switch (_state) {
    case gameStateBlue:
        color = ccc3(0, 0, 255);
        break;
    case gameStateGreen:
        color = ccc3(0, 255, 0);
        break;
    default:
        break;

        // etc.
}

将此颜色信息发送到处理您的精灵数组的方法,如下所示:

for (CCSprite *sprite in _arrayOfSpritesToChangeColor) {
    sprite.color = color; 
}

这将需要预先计划您的资产,但如果您想尝试不同的颜色和效果,可以提高灵活性。这样可以减轻税收,并且您不需要交换大量资产来实现您想要的目标。现在,我的Cocos相当生疏,所以我可能搞砸了一些细节,但总体思路应该是合理的。

编辑:保持对数组中sprite的引用的替代方法是拥有自己的sprite子类,并让该子类具有CCSprite colorSprite属性。然后你可以循环遍历场景的子节点并更改具有此属性的精灵。