Cocos2d-x制作微信打飞机游戏中的一些技术总结

1.首先是Cocos2d-x的内存机制

之前这个游戏写完的时候,退出会报内存异常的错误,原因是我把每个create过的对象都在析构函数里面release()了一下,这是没有必要的。因为在cocos2d-x中,每个create过的对象,都默认加了autorelease(),会自动释放。还有一个要注意的问题就是retain()和release()要成对出现,cocos2d-x用了引用计数的方法来管理内存,当retian()一次时候,引用计数加一,release()一次时,引用计数减一,当引用计数为0时,才可以被释放掉。


2.retian()在什么时候用到?

为了保证在每一帧刷新的时候,一些对象不被释放掉,所以要用retian()来持有,把当前对象加入到内存池。有一个retain(),就要有一个release(),必须要成对出现。

例如当前这个项目中的:


void GameLayer::initData()
{
	bgHeight = 520;
	this->setTouchEnabled(true);
	SimpleAudioEngine::sharedEngine()->playBackgroundMusic("game_music.mp3");
	wSize = CCDirector::sharedDirector()->getWinSize();
	planeArray = CCArray::create();
	planeArray->retain();
	smallPlaneTime=0;
	mediumPlaneTime=0;
	bigPlaneTime=0;
	scoreInt=0;
	propTime=0;
	isVisible=false;
}
这个planeArray数组用来放敌人飞机的,为了防止在刷新的时候被释放掉,所以用retain()来持续拥有。

在析构函数中又被释放掉。

GameLayer::~GameLayer()
{
	planeArray->release();

}

3. 中文乱码问题

在做这个游戏的时候,有的时候需要显示中文,但是显示的确实乱码,这主要是因为编码方式不一致的问题,这里我找到了一个方法:

新建一个string.xml文件,建立一个数据字典文件,如下面所示:

<dict>
	<key>score</key>
	<string>飞机大战分数:</string>
	<key>continue</key>
	<string>继续</string>
</dict>
需要注意的是这个文件一定要保存为utf-8格式,接着读取数据字典里面的内容,代码如下:

CCDictionary *strings = CCDictionary::createWithContentsOfFile("fonts/string.xml");
const char *score = ((CCString *)strings->objectForKey("score"))->getCString();


附上最后的效果图:



最后附上我的源代码,我的开发环境是VS2012+cocos2d-x 2.2.1


代码地址:

http://download.csdn.net/detail/chenbinbin/6795009













  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值