【Software MyZone 专栏】RPG游戏心得

本文为firedragonpzy原创,转载务必在明显处注明:
转载自【Softeware MyZone】

原文链接: http://www.firedragonpzy.com.cn/index.php/archives/1073

这文章写了好久了,也一直没有空发表……


(一)有关游戏进度系统,设置两个标识

static const char gcCURPROGRESSMARK[] ="cur_progress_mark";
static const char gcPROGRESSMAKE[] ="progress_mark";

1)先来说一下gcCURPROGRESSMARK,它存取当前进度值,而gcPROGRESSMAKE用来存取总进度。就拿打怪来说,怪是你自己封装的精灵,不同的关卡有不同的怪,所以需要设置gcCURPROGRESSMARK,来区分在本场景中应该出现什么怪。当然,你也可以不用这个标识,另外设置一个标识。但这个标识可以在多个地方使用,我们本着尽量少使用静态变量,少占用内存,提高游戏运行速率为原则,所以,使用此标识。

2)再来说一下gcPROGRESSMAKE 。因为RPG游戏的关卡或者是某些场景你可以多次进入,当你首次进入和以后进入部分道具什么的使用是不同的 ,例如宝箱,第一次进入有,再此进入就没有了。第一次获得的是金币, 再次进入获取的及有可能是各种符。另外,有些场景或者任务不是一开始就开启的,所以设置了gcPROGRESSMAKE。

3)有关进度,也有像如愤怒的小鸟那种,也可以将每一小关设置标识,三个标识即可,未开启,开启,玩过。如果有购买,还要设计是否购买的标识。

(二)有关数据的加载
一般,游戏的开始都会有加载动画,这时候可以设置部分初始值,一般是音乐音效和游戏的进度值,这个也可以在之后设置,但是进度可以区分是否首次进入,以便初始化音乐,所以在此设置,有关音乐音效的设置,可以参考此文http://www.firedragonpzy.com.cn/index.php/archives/905。动画后会是菜单,这时候加载主要数据,读取人物属性、任务等数据。菜单后进入游戏场景。

(三)有关效率及内存问题
注意点:1)CCMutableArray 记得removeAllObjects并且release

2)使用CCSpriteFrameCache和CCTextureCache,记得释放。方法如下:

CCTextureCache::sharedTextureCache()->removeAllTextures(); //释放到目前为止所有加载的图片
CCTextureCache::sharedTextureCache()->removeUnusedTextures(); //将引用计数为1的图片释放掉
CCTextureCache::sharedTextureCache()->removeTexture(); //单独释放某个图片
CCSpriteFrameCache 与 CCTextureCache //释放的方法差不多。

有关内存问题,详细可参考:《cocos2d-x与ios内存管理分析》一文

(四)所思所得即总结梳理:
1)定义一个头文件,集合共用的头文件,进行一次性引入。
2)定义ISDEBUG一个常量(bool类型),供调试使用,例如:

if (ISDEBUG)
{
CCLOG("MainGameScene release");
}

3)游戏中分享的代码:

NSURL* url = [NSURL URLWithString:@"http://www.firedragonpzy.com.cn"];
[[UIApplication sharedApplication] openURL:url];

这个是oc的语法,需要将文件的后缀名改为mm混编才可以通过执行,否则报错。m是oc语法的文件,cpp是c++语法的文件,mm是c++和oc混合语法的文件。

开发期间你使用ture,发布时可以改为false。当然有人可能会考虑到效率问题,这是你可以ctrl+H,将查找内容改为:ISDEBUG,查找范围改为:当前项目,进行删除。这样不仅便于调试,而且更利于你对cocos2d-x/c++语言的理解与掌握。

标签: cocos2d-x

?>