我最近问了一个问题,那就是涉及实施强化措施;但是,我已经决定以不同的方式去做。
在我的游戏中,我有一个无尽的滚动背景,主角在收集硬币时向右移动。
当玩家击中蓝色硬币时,上电,我想要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];
}
感谢您的任何想法!
答案 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属性。然后你可以循环遍历场景的子节点并更改具有此属性的精灵。