【问题标题】:Cocos2d scheduling selector in child node子节点中的 Cocos2d 调度选择器
【发布时间】:2026-02-19 06:50:02
【问题描述】:

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

这是我在 GameScene 类中调用的代码 sn-p 以调用子类中处理我的 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

有什么帮助吗?

【问题讨论】:

    标签: ios cocos2d-iphone


    【解决方案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。

    【讨论】:

      最近更新 更多