1

さまざまな引数を使用してcosos2Dでイベントをスケジュールする必要があります。ネットで検索しようとしましたが、解決策を見つけることができませんでした。使うことができます

[セルフスケジュール:@selector(move :)間隔:0.3];

しかし、次のように引数を渡すにはどうすればよいですか?

[self schedule:@selector(move:withPoint:) interval:0.3];

この機能にアクセスします。

-(void)move:(id)object withPoint:(CGPoint)point{
}
4

2 に答える 2

2

これを実現するには、インスタンス変数で何らかのエンクロージャー(配列/ディクショナリ、構造体など)を使用する必要があります。例えば:

placeholderDict = [NSDictionary dictionaryWithObjectsAndKeys:
    [NSValue valueWithCGPoint:point], @"point",
    theObject, @"object",
    nil];
[self schedule:@selector(moveWithPointWrapper) interval:0.3];

- (void)moveWithPointWrapper
{
    CGPoint pt = [(NSValue *)[placeholderDict objectForKey:@"point"] CGPointValue];
    id obj = [placeholderDict objectForKey:@"object"];
    [self move:obj withPoint:pt];
}

お役に立てれば。

編集:@ learncocos2dが指摘したように、単一インスタンス変数(オブジェクト、CGPoint ...)を作成するだけでも十分であり、辞書のオーバーヘッドも必要ありません。

于 2012-07-13T05:07:08.357 に答える
2

あなたがしたいことは不可能です。

スケジュールするメソッドは同じクラスにあるため、インスタンス変数を使用するだけで済みます。このようにセレクターをスケジュールすることができ、メソッドにはこのシグネチャが必要です(ccTimeパラメーターのみを取ります)。

[self schedule:@selector(move:) interval:0.3];

-(void)move:(ccTime)delta
{
}

このメソッドで必要な変数にアクセスするには、それらをインスタンス変数として追加します。

@interface MyClass : CCNode
{
   id moveObject;
   CGPoint movePoint;
}
@end

次に、この変数をupdateメソッドで使用したり、他のメソッドで変更したりできます。

-(void)move:(ccTime)delta
{
    // read or modify moveObject and movePoint as needed
}
于 2012-07-13T11:36:18.000 に答える