位置: 编程技术 - 正文

cocos2dx 执行流程分析(cocos2d schedule)

编辑:rootadmin

推荐整理分享cocos2dx 执行流程分析(cocos2d schedule),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:cocos2d schedule,cocos2dx怎么用,cocos2d怎么用,cocos2dx启动流程,cocos2djs,cocos2djs,cocos2dx schedule,cocos2dx schedule,内容如对您有帮助,希望把文章链接给更多的朋友!

看了教程,还是要自己写写HelloWorld才能记住,于是在写HelloWorld之前,还是要看看别人的HelloWorld才行~

(以下CS-X均为Cocos2D-X的缩写)

1. 导演类

用VS新建一个CS-X工程,然后自己帮我们生成一个HelloWorld工程,然后看看AppGelegate.app文件,里面有这个函数:

bool AppDelegate::applicationDidFinishLaunching()

{

// initialize director

CCDirector *pDirector =CCDirector::sharedDirector();

pDirector->setOpenGLView(CCEGLView::sharedOpenGLView());

// enable High Resource Mode(2x, such as iphone4)and maintains low resource on other devices.

// pDirector->enableRetinaDisplay(true);

// turn on display FPS

pDirector->setDisplayStats(true);

// set FPS. the default value is 1.0/ if you don'tcall this

pDirector->setAnimationInterval(1.0 / );

// create a scene. it's an autoreleaseobject

CCScene *pScene =HelloWorld::scene();

// run

pDirector->runWithScene(pScene);

return true;

}

因为我还是新手,只能从表面上来理解。

CCDirector类,是导演类,在CS-X的里,构建一个游戏,就是构建一个世界(其实我觉得所有的程序都是在构建世界~噗),这个世界由导演类去指导演绎,于是,在打开游戏的第一步时,导演告诉程序:

pDirector->setDisplayStats(true); //要显示FPS数&#;,方便我查看游戏效率

pDirector->setAnimationInterval(1.0 /); //游戏每秒播放多少帧(这里是帧)

pDirector->runWithScene(pScene); //进入游戏,首先要显示哪个场景

于是代码都很简单,主要是要留意,一个类继承了CCScene就可以作为场景使用,然后用导演类的runWithScene方法运行游戏的第一个场景,但是以后切换场景就要用replaceScene方法了。

2. 自定义场景

于是现在来看看自定义的场景类,先看看HelloWorldScene.h头文件,很短,看着舒服~

class HelloWorld : public cocos2d::CCLayer

{

public:

virtual boolinit();

static cocos2d::CCScene* scene();

void menuCloseCallback(CCObject* pSender);

CREATE_FUNC(HelloWorld);

};

menuCloseCallback函数我觉得可以暂时不理它,算了,还是忍不住要理一下。它是一个回调函数,没了,仅此而已,就是Android的OnClickListener里面的onClick函数一样,但是又有点不一样,糟糕,我不解释了,乱了,这不是重点~!

scene函数是不可缺的,它是CCLayer的类,HelloWorld里要重写这个函数的。那scene函数在哪个地方会用到?还记得之前那段代码吗?新建一个场景类的时候是这样的:

// create a scene. it'san autorelease object

CCScene *pScene =HelloWorld::scene();

// run

pDirector->runWithScene(pScene);

好了,就是这样的。

再来看看CREATE_FUNC(HelloWorld);这个我纠结了很久,CREATE_FUNC是一个宏(应该是的,我对C&#;&#;只停留在初级语法):

#defineCREATE_FUNC(__TYPE__)

static__TYPE__*create()

{

__TYPE__ *pRet =new__TYPE__();

if (pRet&&pRet->init())

{

pRet->autorelease();

returnpRet;

}

else

{

deletepRet;

pRet =NULL;

returnNULL;

}

}

cocos2dx 执行流程分析(cocos2d schedule)

CREATE_FUNC实际上就是create函数,准确的说,是重写了CCLayer里的create函数,看看CCLayer的create函数:

CCLayer*CCLayer::create()

{

CCLayer *pRet =newCCLayer();

if (pRet&&pRet->init())

{

pRet->autorelease();

returnpRet;

}

else

{

CC_SAFE_DELETE(pRet);

returnNULL;

}

}

是的,CREATE_FUNC的作用只不过是把create的返回&#;改成继承了CCLayer的实际子类(有点晕,仔细逻辑一下~)

好了,我假设我们已经懂了CREATE_FUNC的作用了,不~!还没呢~!看看

HelloWorldScene.cpp里是怎么重写scene函数的:

CCScene*HelloWorld::scene()

{

CCScene * scene = NULL;

do

{

// 'scene' is an autoreleaseobject

scene =CCScene::create();

CC_BREAK_IF(!scene);

// 'layer' is an autoreleaseobject

HelloWorld *layer =HelloWorld::create();

CC_BREAK_IF(!layer);

// add layer as a child toscene

scene->addChild(layer);

}while (0);

// return the scene

return scene;

}

于是我们发现了,虽然HelloWorld自称是场景类,但是导演要的并不是它~!导演还是要了一个真正的CCScene类,不信你看:

scene =CCScene::create();

这里创建了一个真正的CCScene类。

还不够,再看:

HelloWorld *layer =HelloWorld::create();

scene->addChild(layer);

HelloWorld只是作为一个layer(一个层),它被添加到刚刚创建的那个CCScene类了。好吧,现实很残酷,尽管HelloWorld基础了场景类,可它依旧不是一个真正的场景~!

好,紧接着,不要放松,还记得刚刚create函数里有这几句吗?

if (pRet &&pRet->init())

{

pRet->autorelease();

returnpRet;

}

OK,我知道大家还记得的,于是刚刚拿两句又还记得吗?

HelloWorld *layer =HelloWorld::create();

scene->addChild(layer);

是的,也就是说,场景类的init函数是一定会被调用的。

于是,这就表示,继承了CCScene的类,必须要有这三个家伙:

public:

virtual boolinit();

static cocos2d::CCScene* scene();

CREATE_FUNC(HelloWorld);

};

3.最后的最后,当然是总结

很混乱,我自己也很混乱,原来我的表达能力(噗,我自己也无法原谅自己啊= =),所以要总结一下。

1).HelloWorld工程主要就是教我们创建一个场景类

2).AppDelegate.cpp里会创建第一个显示的场景类,此时用的方法是runWithScene

3).要新建一个场景类,就一定要有以下三个函数:

virtualboolinit(); //初始化,可以在这里创建精灵

staticcocos2d::CCScene*scene(); //在这里要自己新建一个CCScene类,然后把我们自定义的场景类作为一个CCLayer添加到这个CCScene类中

CREATE_FUNC(HelloWorld); //相当于重写create函数,让create函数返回子类对象。

4.然后,就是这样了。

好了,

标签: cocos2d schedule

本文链接地址:https://www.jiuchutong.com/biancheng/368943.html 转载请保留说明!

上一篇:quick cocos2dx-Lua中的自定义事件的使用

下一篇:cocos2dx配置android环境并打包apk(cocos2dx安装和初步使用)

  • 盘亏存货进项税额转出的计算公式
  • 运输开票的税点是多少
  • 广告赞助支出可以抵税吗
  • 出口未开票怎么会计处理
  • 公司购买汽车的购置税怎么做账
  • 员工上班期间应穿
  • 指定会计科目是
  • 可抵扣增值税的发票
  • 公司没车但是有加油费发票怎么处理?
  • 隐名股东违法吗
  • 没签合同怎么交社保
  • 河道工程维护费按什么标准计提
  • 专业合作社的业务范围
  • 水果 增值税专票
  • 农产品初加工免征企业所得税
  • 银行承兑汇票收费
  • 建筑安装业跨省经营管理税务通知
  • 财务软件里面可以修改吗
  • 建筑投资包括哪些
  • wind10激活密钥
  • 利润表中哪些属于营业外收入
  • 企业广告费的会计处理方法研究
  • 一次性开票分期确认收入如何纳税申报
  • 建筑行业企业所得税怎么征收
  • 公司过节发红包怎么入账
  • 蓝牙有哪些功能
  • 修改linux启动项
  • 纳税人逾期申报
  • 纳税申报的流程有哪三步
  • mmc.exe是什么
  • 典当行交易是给现金吗
  • vue如何预加载图片
  • thinkphp框架安装
  • 支付的招标代理费计入成本还是费用
  • 报销差旅费的会计分录为什么是其他应收款
  • 编译原理第三版课后答案
  • 工程收到款项会计分录
  • vue点击按钮显示对应的内容
  • 开源ei
  • 为什么我会选择那个对我一般的男人结婚
  • 所得税在什么情况下免税
  • 织梦设置的关键词看不到
  • 抵扣完进项怎么算应交增值税
  • phpcms 用的是什么模板引擎
  • sql server 2008设置角色
  • 交易性金融资产是什么意思
  • 开发支出在资产负债表填哪一栏
  • 个人所得税专项附加扣除2023
  • 控股子公司破产清算 母公司需审计
  • 用友应收系统凭证冲销后查询不到怎么办
  • 私募基金怎么运作
  • 劳务费发票是个人的吗
  • 只有收入没有成本怎么做账
  • 社保比例调整了吗
  • 社保局会给失业人员打电话吗
  • 固定资产报废时,后续未折旧额计入哪里
  • 接受捐赠固定资产存货等有相关凭据的其成本按什么确定
  • 计提折旧,生成折旧分摊凭证步骤
  • 营利性养老院都交哪些税
  • 对方公司收钱不开发票怎么办
  • 征收率和税率的区别举例
  • 银行对账单怎么打印
  • 新企业的创建
  • ubuntu 12.04 intel集成显卡设置分辨率的步骤分享
  • 苹果mac怎么查看运行数据
  • mac的icloud
  • linux软件安装在哪个文件夹
  • win7系统怎么把c盘的内存加到d盘
  • win7点开始一直跳闪
  • win10系统免费升级
  • WIN10怎么彻底删除works2
  • iptables防火墙规则
  • Cocos2dx------从json文件读取数据
  • 飞完整版歌曲
  • python标准模板库
  • 设计shell程序
  • 国家电子税务局云南省电子税务局
  • 姓名验证不正确
  • 淄博市地方税务局
  • 党风监督员监督和反应情况怎么写
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设