0

子ノード クラスでスケジュール メソッドを呼び出さずに、クラス GameScene の子ノードでセレクターをスケジュールしたいと思います (例: [セルフ スケジュールなど])。

これは、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

セレクターに引数を与えることはできません。これを行う最も簡単な方法は、次のようにクラスに iVar を含めることですParallaxMultipleBackgrounds: int 修飾子。にしreadwrite propertyます。次に、それを割り当てて、スケジュール メソッドを呼び出します。

このような :

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 を使用していません。しかし、それは完全なアイデアです。ただし、その data 引数を送信したとき、それは void* です。したがって、そこに整数を送信することはできませんが、NSString を使用すると送信できます。

于 2012-07-12T14:40:47.297 に答える