首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Cocos2D:通过CCCallFuncND传递CGPoint

Cocos2D:通过CCCallFuncND传递CGPoint
EN

Stack Overflow用户
提问于 2011-09-28 01:29:22
回答 4查看 2.7K关注 0票数 0

调用带有操作的方法的适当方式是什么,传递CGPoint参数的方法本身应该是什么样子的?我试着在网上查找例子,但没有太多的运气,所以我一直在猜测。

我尝试的方法是这样调用它:

代码语言:javascript
复制
    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]];

以及方法本身:

代码语言:javascript
复制
-(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);

}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-09-30 17:57:20

将CGPoint (或任何非id类型,如C结构)发送到以id为参数的方法(任何使用performSelector的方法)的正确方法是将其包装在NSValue对象中:

代码语言:javascript
复制
NSValue* value = [NSValue valueWithBytes:&spriteCoord objCType:@encode(CGPoint)];

在被调用的方法中,您可以通过将数据指针转换为NSValue*并调用getValue来从NSValue对象中检索点:

代码语言:javascript
复制
-(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);

}
票数 5
EN

Stack Overflow用户

发布于 2011-10-07 11:11:01

GamingHorror关于将CGPoint包装在NSValue中的建议恰到好处。

但是有一种比使用valueWithByte:objCType:方法更简单的方法:valueWithCGPoint:,假设您是为iOS而不是MacOS编写代码的。

代码语言:javascript
复制
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

票数 5
EN

Stack Overflow用户

发布于 2011-09-28 13:02:12

您不能使用该语法将类型转换为CGPoint。试试看...

代码语言:javascript
复制
CGPoint *spriteCoord = data;

CGFloat ptX = spriteCoord->x;
CGFloat ptY = spriteCoord->y;

我试过..。

代码语言:javascript
复制
CGPoint* spriteCoord = (CGPoint)data;

这并没有起作用,我猜是这样的。试试我的第一个建议,看看它对你是否有效。它确实为我编译了,但我不确定它将如何执行,这可能取决于您的特定情况。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7573257

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档