博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
cocos2d addChild 方法会自动将 child 的引用计数加1
阅读量:4547 次
发布时间:2019-06-08

本文共 1892 字,大约阅读时间需要 6 分钟。

转载自:

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。编译器会判断哪个方法没有,然后自已生成之。

转载于:https://www.cnblogs.com/yang3wei/archive/2012/02/17/2739923.html

你可能感兴趣的文章
c语言诊断_断言库函数#include<assert.h>
查看>>
input type="file"获取文件名方法
查看>>
强力上攻后,缓解期结束,MACD死叉的案例
查看>>
Linux文件权限
查看>>
js替换字符串中特殊字符
查看>>
第一单元OO总结
查看>>
带分页的sql语句
查看>>
OC内存管理
查看>>
C++面试宝典2011版
查看>>
Android学习笔记——ProgressBar
查看>>
Centos下关于ssh、scp与rsync设置与应用
查看>>
排列组合+组合数取模 HDU 5894
查看>>
hdu 6206 apple 点在内接圆外
查看>>
Jquery实现图片自动轮播
查看>>
idea Cannot open URL.Please check this URL is correct
查看>>
自我表水
查看>>
sqlserver中的数据转换与子查询
查看>>
【CF316G3】Good Substrings 后缀自动机
查看>>
【BZOJ2938】[Poi2000]病毒 AC自动机+DFS
查看>>
【BZOJ4750】密码安全 单调栈
查看>>