0

我想在 GameScene 类的子节点中安排一个选择器,而不必调用子节点类中的 schedule 方法(例如 [self schedule etc..])。

这是我在 GameScene 类中调用的代码片段,用于调用子类中处理我的 GameScene 背景的方法。

ParallaxMultipleBackgrounds *background = [self getChildByTag:GameSceneBackgroundBase];
//I TRIED THIS:
[background schedule:@selector(([background changeSpeedFactorBy:3])) interval:1];
//AND 
[background schedule:@selector(changeSpeedFactorBy:3)];
//AND
[[background schedule:@selector(changeSpeedFactorBy:3) interval:1] ];
//BUT..

不幸的是,当我从编译器收到各种错误消息时,这些方法调用都不起作用。我不确定我做错了什么,因为我在 ParallaxMultipleBackgrounds 类中声明了选择器-(void) changeSpeedFactorBy:(float)factor 。

有什么帮助吗?

4

1 回答 1

1

你不能给选择器一个参数。最简单的方法是在ParallaxMultipleBackgrounds类中有一个 iVar,如下所示:int 修饰符。使它成为一个readwrite property. 然后分配它并调用 schedule 方法。

像这样 :

ParallaxMultipleBackgrounds *background = [self getChildByTag:GameSceneBackgroundBase];
background.modifier = 3;
[background schedule:@selector(changeSpeedFactorBy:) interval:1];

并在changeSpeedFactorBy方法中使用该修饰符变量进行更改。

希望这可以帮助。

干杯!

编辑:您也可以通过唱 CCCallFuncND 来发送参数。如果你随后声明一个 CCRepeatForever 动作,你确实可以使用参数永远调用选择器。像这样:

CCCallFuncND *call = [CCCallFuncND actionWithTarget:background selector:@selector(changeSpeedFactorBy:) data:amont];

CCDelay *delay = [CCDelay actionWithDuration:1];

CCSequence *seq = [CCSequence actions:call,delay,nil];

CCRepeatForever *repeat = [CCRepeatForever actionWithAction:seq];
[background runAction:repeat];

抱歉有任何语法错误,我现在不在 Mac 上。但这将是一个完整的想法。不过,有一点提到,当您发送该数据参数时,它是一个 void* 。所以你不能在那里发送一个整数,但是你可以用一个 NSString。

于 2012-07-12T14:40:47.297 回答