2012-07-13 19 views
0

我需要使用各種參數在cosos2D中安排一個事件,我嘗試過在網上搜索,但無法從中獲得任何解決方案。我可以使用在cocos2D中有多個參數的計劃事件

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

,但我應該如何將參數傳遞給它喜歡:

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

來訪問該功能。

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

回答

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

你也可以創建一個CGPoint實例變量。 – LearnCocos2D 2012-07-13 11:30:29

+0

@ LearnCocos2D好點,我會更新我的答案。 – 2012-07-13 11:34:07

1

你想做什麼是不可能的。

由於您要調度的方法位於同一個類中,因此可以只使用一個實例變量。您可以安排選擇像這樣和方法需要有這樣的簽名(只需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 
}