1

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

[自我计划:@selector(移动:)间隔:0.3];

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

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

访问此功能。

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

2 回答 2

2

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

由于您要调度的方法在同一个类中,因此您可以只使用实例变量。您可以像这样安排选择器,并且该方法需要具有此签名(仅采用 ccTime 参数):

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

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

要访问此方法中所需的变量,请将它们添加为实例变量:

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

然后你可以在更新方法中使用这个变量,和/或在其他方法中修改它们。

-(void)move:(ccTime)delta
{
    // read or modify moveObject and movePoint as needed
}
于 2012-07-13T11:36:18.000 回答
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 回答