在cocos2D中调度具有多个参数的事件

时间:2012-07-13 04:39:31

标签: iphone ios xcode cocos2d-iphone

我需要使用各种参数在cosos2D中安排一个事件,我尝试在网上搜索但是无法从中获得任何解决方案。我可以用

  

[自我安排:@selector(move :) interval:0.3];

但是我应该如何将参数传递给它:

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

访问此功能。

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

2 个答案:

答案 0 :(得分:1)

您应该在实例变量中使用某种机箱(数组/字典,结构等)来实现此目的。例如:

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 ......)也足够了,你甚至不需要字典的开销。

答案 1 :(得分:1)

你想做的事情是不可能的。

由于您要安排的方法属于同一个类,因此您只需使用实例变量即可。您可以像这样安排选择器,并且该方法需要具有此签名(仅采用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
}