Iphone 在cocos2d中实现加电以更改整个游戏状态?

Iphone 在cocos2d中实现加电以更改整个游戏状态?,iphone,objective-c,cocos2d-iphone,Iphone,Objective C,Cocos2d Iphone,我最近问了一个问题,这涉及到如何实现加电;然而,我决定用另一种方式去做 在我的游戏中,我有一个无休止的滚动背景,主角在收集硬币时向右移动 当玩家击中蓝色硬币时,通电,我想要1。要更改为蓝色的角色(我有用于此的帧),2。背景变成蓝色,3。改变蓝色的平台(有图像);我希望所有这些因素都能持续20秒 我计划通过在我的其他类(平台类、玩家类)中设置一个带有Blue实例变量(公共变量)的Blue类来实现这一点,我会相应地将该实例变量设置为YES和NO(如果蓝色硬币被击中)。然而,当我加入一个定时器时,它不

我最近问了一个问题,这涉及到如何实现加电;然而,我决定用另一种方式去做

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

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

我计划通过在我的其他类(平台类、玩家类)中设置一个带有Blue实例变量(公共变量)的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];
}
//尝试移除蓝色硬币
-(无效)tryremovebuecoin
{
NSMutableArray*currentBluecoinArray=[self getcurrentBluecoinArr];
if(currentBluecoinArray)
{
int playerY=((CCLayer*)(self.player)).position.y;

对于(int x=0;x现在,我上次使用Cocos2d已经有一段时间了,但是您知道您实际上可以设置节点的颜色信息,对吗?这听起来是一种更明智的方法。在设计精灵时要考虑到这一点,并保留一个包含所有需要着色的元素的数组

有一种基于游戏状态定义新颜色的方法,例如,游戏状态枚举可以与电源上的NSInteger属性匹配。 CC3b颜色

// _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属性。然后您可以循环通过场景的子级并更改具有此属性的精灵。

谢谢。不幸的是,它们不是CCSprite,而是动画mation在精灵上运行,它每两帧都会更改精灵纹理。我可以对动画执行相同的操作吗?…我可以在一个类中更改状态,并让它在另一个类中被知道吗?您必须对构成动画的精灵执行完全相同的操作。只要该状态是公共属性,就应该可以直接对其执行操作从任何其他类中删除它。对不起,那应该是“运行动画的精灵”(告诉你我生锈了),