Che*_*kie 0 parameters methods cocos2d-iphone cgpoint
使用动作调用方法的适当方法是什么,以及传递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]];
Run Code Online (Sandbox Code Playgroud)
方法本身:
-(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);
}
Run Code Online (Sandbox Code Playgroud)
将CGPoint(或任何非id类型,如C结构)发送到以id作为参数(使用performSelector的任何方法)的方法的正确方法是将其包装在NSValue对象中:
NSValue* value = [NSValue valueWithBytes:&spriteCoord objCType:@encode(CGPoint)];
Run Code Online (Sandbox Code Playgroud)
在被调用的方法中,您可以通过将数据指针强制转换为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);
}
Run Code Online (Sandbox Code Playgroud)
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);
}
Run Code Online (Sandbox Code Playgroud)
NSValue也可以使用类似的方式处理CGSize和CGRect.
归档时间: |
|
查看次数: |
2690 次 |
最近记录: |