调用带有操作的方法的适当方式是什么,传递CGPoint参数的方法本身应该是什么样子的?我试着在网上查找例子,但没有太多的运气,所以我一直在猜测。
我尝试的方法是这样调用它:
CGPoint spriteCoord = saveStation.sprite.position;
id a1=[CCMoveTo actionWithDuration:.4 position:ccp(saveStation.sprite.position.x,saveStation.sprite.position.y)];
id actionSaveStationReaction = [CCCallFuncND actionWithTarget:self selector:@selector(saveStationReaction : data:) data:&spriteCoord];
[hero.heroSprite runAction:[CCSequence actions:a1, actionSaveStationReaction, nil]];以及方法本身:
-(void) saveStationReaction:(id)sender data:(void *)data {
CGPoint spriteCoord = (void *)data; //error: Invalid initializer
NSLog(@"spriteCoord x = %f", spriteCoord.x);
NSLog(@"spriteCoord y = %f", spriteCoord.y);
}发布于 2011-09-30 17:57:20
将CGPoint (或任何非id类型,如C结构)发送到以id为参数的方法(任何使用performSelector的方法)的正确方法是将其包装在NSValue对象中:
NSValue* value = [NSValue valueWithBytes:&spriteCoord objCType:@encode(CGPoint)];在被调用的方法中,您可以通过将数据指针转换为NSValue*并调用getValue来从NSValue对象中检索点:
-(void) saveStationReaction:(id)sender data:(void *)data {
CGPoint spriteCoord;
[((NSValue*)data) getValue:&spriteCoord];
NSLog(@"spriteCoord x = %f", spriteCoord.x);
NSLog(@"spriteCoord y = %f", spriteCoord.y);
}发布于 2011-10-07 11:11:01
GamingHorror关于将CGPoint包装在NSValue中的建议恰到好处。
但是有一种比使用valueWithByte:objCType:方法更简单的方法:valueWithCGPoint:,假设您是为iOS而不是MacOS编写代码的。
NSValue *spriteCoordValue = [NSValue valueWithCGPoint:spriteCoord];
[CCCallFuncND actionWithTarget:self selector:@selector(saveStationReaction:data:) data:spriteCoordValue];
// and ..
-(void) saveStationReaction:(id)sender data:(void *)data {
CGPoint spriteCoord = [(NSValue *)data CGPointValue];
NSLog(@"spriteCoord x = %f", spriteCoord.x);
NSLog(@"spriteCoord y = %f", spriteCoord.y);
}NSValue can also deal with CGSize and CGRect using similar way。
发布于 2011-09-28 13:02:12
您不能使用该语法将类型转换为CGPoint。试试看...
CGPoint *spriteCoord = data;
CGFloat ptX = spriteCoord->x;
CGFloat ptY = spriteCoord->y;我试过..。
CGPoint* spriteCoord = (CGPoint)data;这并没有起作用,我猜是这样的。试试我的第一个建议,看看它对你是否有效。它确实为我编译了,但我不确定它将如何执行,这可能取决于您的特定情况。
https://stackoverflow.com/questions/7573257
复制相似问题