在我的cocos2d游戏中,我有各种各样的“通电”,一旦达到,角色变为蓝色,平台变为蓝色,背景也是如此。我不确定我是否以最好的方式实现这一点,所以如果你有其他建议请分享!:)
我创建了一个类 Blue ,它有一个名为 blueCalled 的实例变量
我将这个类导入了我的“Platform”类和我的“Player”类。
powerup和玩家碰撞代码在我的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];
}
//这就是所有影响应该发生的地方我想让一切都变成蓝色。现在,我计划通过将Blue类中的实例变量设置为YES来实现此目的。
在处理主播放器,2。背景和3.平台帧的1.帧的方法中,我有一个if语句检查Blue类的实例变量是YES还是NO并且它起作用因此。 但是,我不知道如何在我的平台和播放器类中使用Blue类中的实例变量,我也不是100%确信这是实现启动的最佳方法。
感谢您提供给我的任何帮助:)
去iOS!
答案 0 :(得分:0)
作为一般规则,如果要访问另一个对象的iVar,则应该创建一个属性来访问它。这不是该规则的例外,但我会告诉你如何做到这一点。
目标C对象本质上是C结构。这意味着->
运算符可以处理它们。在这种情况下,您可以使用blue->blueCalled
,其中blue
是您的Blue
类的实例。
可见性是这项工作(或失败)的关键。如果iVar在头文件中的@interface
内声明,而不是跟随@private
或@protected
声明,则只能使用此方法。