您的位置:首页 > 移动开发 > Cocos引擎

cocos2d addChild 方法会自动将 child 的引用计数加1

2012-02-17 00:24 471 查看
转载自:http://www.cnblogs.com/andyque/archive/2011/07/20/2111453.html

PlayLayer.h

#import "cocos2d.h"

#import "SceneManager.h"

@interface PlayLayer : CCLayer {
NSMutableArray *_flyActionArray;

CCSprite *_dragon;
CCAction *_flyAction;
CCAction *_moveAction;
BOOL _moving;
}

@property (nonatomic, retain) NSMutableArray *flyActionArray;

@property (nonatomic, retain) CCSprite *dragon;
@property (nonatomic, retain) CCAction *flyAction;
@property (nonatomic, retain) CCAction *moveAction;
@end

复制代码

  那么,这里做了些什么事呢?我们创建了三个实例变量:_dragon, _flyAction and _moveAction.从名字差不多也可以看出来它们到底是干什么用的,_dragon是我们的主角精灵,_flyAnimmation负责处理dragon的煽动翅膀的动画,而_moveAction负责处理从一点移动到另一个点。

  因此,CCSprite非常重要,但是,你可能会问你自己,我到底是应该继承CCSprite,还是包含一个CCSprite实例呢?我这里不使用一个Dragon类来继承CCSprite的原因是你可以从文件中加载一张图片来初始化它。这里有一个非常著名的问题:“Is-a”还是“has-a”?好吧,我的喜好是派生至CCNode,然后把所有的CCSprite当作它的属性。因为,我相信这样做会给你最大的灵性性。我承认,如果从CCSprite继承的话,刚开始会有许多方便之处,比如可以直接添加到BatchNode等。但是,我还是坚信,把CCSprite当作一个属性的话,你可以在以后的编程中获得巨大的好处。

  小提示:属性是objc提供给我们的一种方便地生成get/set方法的一种机制,同时还有其它一些好处,比如可以协助内存管理。

For example:

@interface HeroPlayer : NSObject {
NSString* weapon;
NSString* armor;
}

- (NSString*) weapon;
- (NSString*) armor;

- (void) setWeapon: (NSString*)input;
- (void) setArmor: (NSString*)input;

复制代码

   @property是objc声明属性的关键字,括号里面的retain指明set方法时,传入的参数会调用retain,使其引用计数加1.(译者:这样的话,你可以用self.xxx
= [CCNode node];因为,cocos2d里面大量使用autorelease对象,这种对象出了当前mainLoop的话就会被release掉。所以,经常需要retain。而使用self.xxx = [CCNode node];的话,如果xxx属性里面的括号声明成了retain,那么就不用再retain了。简言之,self.xxx = [CCNode node]; 和 xxx = [[CCNode node] retain];等价。但是,我们很少会在cocos2d里面retain什么东西,因为,我们基本上都会调用addChild方法,而这个方法会把参数自动retain一次,所以产生的autorelease对象才不会被释放掉。)


@implementation HeroPlayer

@synthesize weapon;
@synthesize armor;
...
@end

复制代码

  @synthesize会自动为我们生成getter和setter。因此,我们只需要为这个类实现dealloc方法就可以了。

  访问器(getter/setter)只有当它们不存在的时候才生成,所以可以放心使用 @synthesize来声明属性,之后,你再可以按需要定制相应的getter和setter。编译器会判断哪个方法没有,然后自已生成之。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐