cocos2d中CCCallFuncND传参数的注意事项
来源:互联网 发布:vb中static 编辑:程序博客网 时间:2024/05/15 15:32
http://www.cnblogs.com/pengyingh/archive/2012/04/10/2439997.html
cocos2d中CCCallFuncND传参数的注意事项
A.用CCFuncBlock可以不用传参数,代码简洁高效,函数内临时变量如果不retain,不存在跳出函数使用域后被回收情况(推荐)
//用CCCallBlock的block方式CGPoint convertedLocation = [self convertTouchToNodeSpace:touch];CCCallBlock *block = [CCCallBlock actionWithBlock:^{ //回调方法在一个函数循环内3个好处: 1.不用传递(void *)参数,所以convertedLocation不需要封装, 2.传递指针类型变量(非alloc或copy)也不需要retain, 3.alloc或copy方式产生的参数,函数内释放,省去函数外手动释放的麻烦。 [self flightBezier:convertedLocation]; }]; [flight runAction:[CCSequence actions:[CCMoveTo actionWithDuration:1 position:ccp(convertedLocation.x,convertedLocation.y)], block, nil]];
B.使用CCFuncND传递参数(void *)类型,若想传递CGPoint等非指针类型参数,,有两种方法:
1.传递参数地址,注意参数必须为静态变量,否则参数地址一出循环即被系统回收。
-(void) ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{ UITouch *touch = [touches anyObject]; static _startPos; CGPoint convertedLocation = [self convertTouchToNodeSpace:touch]; _startPos = converedLocation; //传递&_startPos id call = [CCCallFuncND actionWithTarget:self selector:@selector(call:data:) data:(void *)&_startPos]; [flight runAction:[CCSequence actions:[CCMoveTo actionWithDuration:1 position:ccp(convertedLocation.x,convertedLocation.y)], call, nil]]; return;}
回调:
- (void)call:(id)sender data:(void *)point{ //sender即为flight指针 //传递&_startPos; CGPoint p = *(CGPoint *) point; [self flightBezier:p];}
2.如果想传递CGPoint等非指针类型变量, 可以封装成NSValue再传递
-(void) ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{ UITouch *touch = [touches anyObject]; static _startPos; CGPoint convertedLocation = [self convertTouchToNodeSpace:touch]; _startPos =converedLocation; //传递nsvalue封装的cgpoint NSValue *va = [[NSValuevalueWithCGPoint:convertedLocation]retain];//这里不能加autorease id call1 = [CCCallFuncND actionWithTarget:self selector:@selector(call:data:) data:(void *)va]; [flight runAction:[CCSequence actions:[CCMoveTo actionWithDuration:1 position:ccp(convertedLocation.x,convertedLocation.y)], call1, nil]];return;}
回调:
- (void)call:(id)sender data:(void *)point{ //传递nsvalue CGPoint p = [((NSValue *)point) CGPointValue]; //父变量,子释放,比较忌讳,但是没找到好的解决办法先凑合用 [(NSValue *)point release]; point = nil; [self flightBezier:p];}
- cocos2d中CCCallFuncND传参数的注意事项
- cocos2d中CCCallFuncND传参数的注意事项
- CCCallFuncND 传参数
- cocos2d中CCCallFunc、CCCallFuncN和CCCallFuncND的区别
- cocos2d中CCCallFunc、CCCallFuncN和CCCallFuncND的区别
- cocos2d中CCCallFunc、CCCallFuncN和CCCallFuncND的区别
- cocos2d中CCCallFunc、CCCallFuncN和CCCallFuncND的区别
- cocos2d-x中CCCallFunc CCCallFuncN CCCallFuncND的区别和使用示例
- cocos2d-x中CCCallFunc CCCallFuncN CCCallFuncND的区别和使用示例
- cocos2d-x中CCCallFunc CCCallFuncN CCCallFuncND的区别和使用示例
- cocos2d-x中回调函数CCCallFunc CCCallFuncN CCCallFuncND的区别和使用示例
- cocos2d-x中CCCallFunc CCCallFuncN CCCallFuncND的区别和使用示例
- cocos2d-x中CCCallFunc CCCallFuncN CCCallFuncND的区别和使用示例
- cocos2d-x中CCCallFunc CCCallFuncN CCCallFuncND的区别和使用示例
- cocos2d-x CCCallFuncN中node CCCallFuncND中data
- Cocos2D中CCSprite注意事项
- cocos2d-x 之 CCCallFunc、CCCallFuncN 、CCCallFuncND区别
- cocos2d-x 之 CCCallFunc CCCallFuncN CCCallFuncND
- iOS 消息通知-NSNotification
- Datastage 分区partition
- hibernate Java项目中自动创表、插入、表不存在等
- 在Eclipse 4.2.2 上离线安装Google Plugin
- JAVA学习的网址总结
- cocos2d中CCCallFuncND传参数的注意事项
- 深入探索 Kdump,第 4 部分: kdump 的亲密战友 crash
- 自绘制按钮(通过重载DrawItem函数实现)
- 【xinfanqie】教你如何让双硬盘自主选择关闭
- getOutputStream() has already been called for this response
- 13条创业公司不应忽视的用户体验设计准则
- IDEA 快捷键笔记
- liunx修改文件及目录的权限详细说明
- 'hibernate.dialect' must be set when no Connection available 异常处理