【教程分享】[老子就爱竖屏]网络版水果机Slot-框架搭建篇1

抱歉迟了这么久才开始写这篇,因为工作上的事(还不是因为Cocos2d-x的CCEditBox说了支持多行但是明明不支持啊!)。废话不说了,直接入正题:

  1. 创建工程
    我这里采用的是Cocos2d-x2.2.2,其实2.x版本都可行,无所谓了。首先按WIN+R输入CMD。

然后确定,接着在文件夹中找到你cocos2d-x的路径并复制下来(最好路径里不要带中文),接着在cmd控制台输入你cocos2d-x所在的盘符,我的是e: 然后输入:cd E:\Work\cocos2d-x-2.2.2\cocos2d-x-2.2.2\tools\project-creator 你刚刚复制的路径,回车。

然后,假设你已经安装了Python那么接下来输入:python create_proj ect.py -project TinySlot -packagecn.StoneLegend.TinySlot -language cpp

这三个参数还是介绍下吧。。project当然是你的工程名,package是android的包名,很多人可能纳闷为什么要用域名倒过来,因为在android系统上包名需要是唯一的,那么能确定你是唯一的方式只能这样比较靠谱了,算是一种潜规则吧。Language是指开发语言cpp是c++的,还可以是lua或者其他的,本篇采用cpp。

回车之后我们会看到

这样就算工程创建成功了。我们到创建工程的目录projects里面去找到我们的工程,把我用不到的平台工程都删掉(你也可以留着,因为我是强迫症)最后剩下这样。

好了,到这里工程创建部分就基本好了。

  1. 编写Scene
    在这个地方我要做一些只有我需要的操作,包括引入一些自己写的底层库,这里就不赘述了结果如下:

值得一说的是,我习惯引入vld来查看内存泄露的情况,看你们自己习惯了。

VLD的运行结果,也再次粉碎了说Cocos2d-x 2.2.2版本有内存泄露的谣传喔~

可能有同学会吓到,这么多文件啊,额其实你不用管,我的底层扩展部分大概50个cpp吧功能都不一样所以没什么好谈的,大部分是数据结构方面的东西,我前一篇已经提过我有强迫症,所以大家无视好了。
另外这里说一下,我在整篇教程中用到的数据类型包括数据结构都是自己实现的,你可以用标准的代替掉没有区别,所以不用深究,我们继续。

我创建了一个名为TinySlot的CPP和H以及一个同名的类继承CCScene作为我们的主场景,我之前已经说过我习惯于单Scene多Layer来组织场景。过程略过,结果如下:


我有一个全局的场景对象g_pkGame,用来在外部访问scene时调用,个人比较喜欢这种简单的方式。在onEnter的时候给pkGame赋值在onExit的时候设置为Null。如果你的流程跟我不一样,那么就无视我说的这些,继续看下面。

我把HelloWorld给删除掉了,替换成了TinySlot,因为我自己的引擎中管理了内存所以我需要Init并在析构的时候Term。运行起来看看。

妥妥的有没有。接下来我们就需要实现layer方面的东西了。我的思路是这样的,重载CCLayer实现我们自己的Layer类,并实现一个管理这个Layer的LayerManager来控制层级关系和触摸之类的消息,
以及我想在底层实现android返回键可以直接返回上层layer。最重要的是,我需要在layer里面实现分辨率适配。以及实现我们自己的控件节点类似CCNode的功能,我叫他UIWidget。
当然一切我都写好了,不可能一步步的写出我的思路,因为很多我也忘记了,我们重点说下分辨率适配好了
在TinySlot类中,我声明了一个
UILayerManager* m_pkManager;
SEFloat32 m_f32ScaleHD;
下面这个变量用于区分我所谓的HD和普通版本,我也将为这两种分辨率分别准备图片,并且区分中英文版本。
我以640×960的分辨率作为基础分辨率来进行适配,首先我需要一些宏:(说过了老子就是爱竖屏)

并在场景的Init中进行初始化

思路很简单我是以屏幕高度作为基准,如果小于568那么就是我认为的小分辨率设备,那么m_f32ScaleHD就是1.0f,这个变量将作为日后UI定位的一个基本参数,
因为HD和普通的资源刚好差1倍所以这个变量能起到关键的作用,日后你就懂了。下面重点说一下适配算法,UILayer类中的SetMainResolution方法实现如下:


算法很简单吧,三个东西用来适配HeightScale WidthScale MainScale,当然这种方式会让你UI布局部分的代码看上去复杂很多,但是也很灵活,随着教程的深入大家会渐渐发现的,另外我又写了一些宏定义来方便使用,让代码显得短一些:

写到这里的时候,楼主已经下班了,本着没有加班费的精神我们来说多语言支持的部分,我打算支持3种语言简体 繁体 英文


以及三个变量
Language m_eLanguate;
const SEChar8m_pcLanguage;
const SEChar8
m_pcImagePath;

我的目录结构大概是这样


Image里面分为Hd和png 用来放一些没有语言区别的
en_US 和 zh_CN里也分Hd和png里面是一些和语言有关的,比如按钮上的文字等。
这个涉及到一个工程资源结构和管理的事情,这以上也都只是我的习惯,如果不爽就按你自己的来。下面放出android和ios获取系统语言的实现

额。我mac没带。。。。算了吧,明天把各平台的实现补上。 框架搭建篇非常的庞大可能会分5篇左右来尽量写的清楚,大家不要着急,我尽可能希望教给新手商业游戏的开发流程,而不是随便写个demo那样的话1千字也用不了。所以大家耐心些,干货大大的有。关注Cocos2d-x论坛,支持我们,帮助新手,共同成长。

说好的补上android:
public static String jni_GetLanguage(){ String kLanguage = Locale.getDefault().getLanguage(); kLanguage += “_”; kLanguage += Locale.getDefault().getCountry(); return kLanguage;}
ios:
const char* CocoaHelper::GetLanguage()
{
NSString* pkLan = objectForKey:@“AppleLanguages”] objectAtIndex:0];
if(!)
{
return “zh_CN”;
}
else if(!)
{
return “zh_TW”;
}
else
{
return “en_US”;
}
}

怒码:2::2::2::2::2:

godlike,干的漂亮。。。:2:

谢谢楼主!!!!!!!:2:

这也叫框架 呵呵 今天算是见识了

感觉略高端?

这配色真的很奇葩…:12:

很好的分享,我推荐到首页左边的热门文章精选了

不错的教程,向lz看齐

楼主,下一篇是什么时候?
别烂尾了呀

图片代码还是这种配色,让人怎么看…:10:

我新手水平不高,:6:,看不清,也看不懂,不过好辛苦的样子,谢谢啦。

不错不错 新手学习中。。。