0

我最近问了一个问题,涉及实施加电;但是,我决定以不同的方式去做。

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

当玩家击中蓝色硬币,加电时,我想要 1. 角色变为蓝色(我有框架),2. 背景变为蓝色, 3. 平台变为蓝色(为此提供图像);我希望所有这些因素在 20 秒内发生。

我计划通过在我的其他类(平台类、播放器类)中设置一个带有蓝色实例变量(公共变量)的Blue类来相应地设置为 YES 和 NO(如果击中了蓝色硬币)。但是,它效率不高,并且在我合并计时器时不起作用。

有谁知道如何实现加电?

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

    // 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];
}

感谢您的任何想法!

4

1 回答 1

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 相当生锈,所以我可能把一些细节搞砸了,但总体思路应该是合理的。

编辑:在数组中保存对精灵的引用的另一种方法是拥有自己的精灵子类,并让该子类具有 CCSprite colorSprite 属性。然后,您可以遍历场景的子节点并更改具有此属性的精灵。

于 2013-11-08T19:26:38.053 回答