加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Cocos2d-x 2 0 从HelloWorld入手

发布时间:2020-12-14 18:55:30 所属栏目:百科 来源:网络整理
导读:?????? 从上一篇《Cocos2d-x 2.0 在Windows平台下的使用》已经初步了解了Cocos2d-x的安装、编译,也已经可以运行HelloWorld示例了,运行HelloWorld至少所需的文件,包括:素材、动态库,我们把 "...Release.win32" 里的 "HelloWorld.exe" 单独拷贝到一个新

?????? 从上一篇《Cocos2d-x 2.0 在Windows平台下的使用》已经初步了解了Cocos2d-x的安装、编译,也已经可以运行HelloWorld示例了,运行HelloWorld至少所需的文件,包括:素材、动态库,我们把"...Release.win32"里的"HelloWorld.exe"单独拷贝到一个新文件夹,至少所需的文件如下图所示:

打开cocos2d-win32.vc2008.sln,展开"HelloWorld"工程,工程结构如下所示:


对应"...HelloWorld"文件夹的结构如下所示:

可知"Classes"放置游戏开发逻辑相关、平台无关的代码,"Resources"放置图片、声音、配置等资源,"win32"等放置平台相关的代码。
?
了解如何运行,在win32下就从main()函数开始,打开"main.cpp",代码如下所示:?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
?
#include? "main.h"
#include? "../Classes/AppDelegate.h"
#include? "CCEGLView.h"

USING_NS_CC;

int?APIENTRY?_tWinMain(HINSTANCE?hInstance,
???????????????????????HINSTANCE?hPrevInstance,
???????????????????????LPTSTR????lpCmdLine,
??????????????????????? int???????nCmdShow)
{
????UNREFERENCED_PARAMETER(hPrevInstance);
????UNREFERENCED_PARAMETER(lpCmdLine);

???? //?create?the?application?instance
????AppDelegate?app;
????CCEGLView&?eglView?=?CCEGLView::sharedOpenGLView();
????eglView.setViewName( "Hello?World");
????eglView.setFrameSize( 480,? 320);
???? //?set?the?design?resolution?screen?size,?if?you?want?to?use?Design?Resoulution?scaled?to?current?screen,?please?uncomment?next?line.
???? //?eglView.setDesignResolutionSize(480,?320);
???? return?CCApplication::sharedApplication().run();
}
其中 AppDelegate是最主要的类,代理运行着整个应用程序,它的体系如下:


简化流程如下所示:


CCEGLView是整个程序窗口类,游戏的显示、表现等等都在这上面进行,跟AppDelegate合起来的流程如下:


CCApplication::run()中调用了applicationDidFinishLaunching()函数,代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
?
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/60?if?you?don‘t?call?this
????pDirector->setAnimationInterval( 1. 0?/? 60);
?
???? //?create?a?scene.?it‘s?an?autorelease?object
????CCScene?*pScene?=?HelloWorld::scene();
?
???? //?run
????pDirector->runWithScene(pScene);
?
???? return? true;
}?
所做的事情包括:初始化导演类CCDirector 、创建HelloWorld场景、运行场景。HelloWorld场景从CCLayer派生,创建HelloWorld场景所调用如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
?
CCScene*?HelloWorld::scene()?
{
???? //?‘scene‘?is?an?autorelease?object
????CCScene?*scene?=?CCScene::create();
?
???? //?‘layer‘?is?an?autorelease?object
????HelloWorld?*layer?=?HelloWorld::create();
?
???? //?add?layer?as?a?child?to?scene
????scene->addChild(layer);
?
???? //?return?the?scene
???? return?scene;
}?
实质是创建一个场景类,再创建HelloWorld层,把层放到场景上。创建HelloWorl层的时候,调用了init()函数,init()函数如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
?
bool?HelloWorld::init()?
{
???? //////////////////////////////
???? //?1.?super?init?first
???? if?(?!CCLayer::init()?)
????{
???????? return? false;
????}
?
???? /////////////////////////////
???? //?2.?add?a?menu?item?with?"X"?image,?which?is?clicked?to?quit?the?program
???? //?you?may?modify?it.
?
???? //?add?a?"close"?icon?to?exit?the?progress.?it‘s?an?autorelease?object
????CCMenuItemImage?*pCloseItem?=?CCMenuItemImage::create(
???????????????????????????????????????? "CloseNormal.png",
???????????????????????????????????????? "CloseSelected.png",
???????????????????????????????????????? this,
????????????????????????????????????????menu_selector(HelloWorld::menuCloseCallback)?);
????pCloseItem->setPosition(?ccp(CCDirector::sharedDirector()->getWinSize().width?-? 20,? 20)?);
?
???? //?create?menu,?it‘s?an?autorelease?object
????CCMenu*?pMenu?=?CCMenu::create(pCloseItem,? NULL);
????pMenu->setPosition(?CCPointZero?);
???? this->addChild(pMenu,? 1);
?
???? /////////////////////////////
???? //?3.?add?your?codes?below...
?
???? //?add?a?label?shows?"Hello?World"
???? //?create?and?initialize?a?label
????CCLabelTTF*?pLabel?=?CCLabelTTF::create( "Hello?World",? "Arial",? 24);
???? //?ask?director?the?window?size
????CCSize?size?=?CCDirector::sharedDirector()->getWinSize();
?
???? //?position?the?label?on?the?center?of?the?screen
????pLabel->setPosition(?ccp(size.width?/? 2,?size.height?-? 50)?);
?
???? //?add?the?label?as?a?child?to?this?layer
???? this->addChild(pLabel,? 1);
?
???? //?add?"HelloWorld"?splash?screen"
????CCSprite*?pSprite?=?CCSprite::create( "HelloWorld.png");
?
???? //?position?the?sprite?on?the?center?of?the?screen
????pSprite->setPosition(?ccp(size.width/ 2,?size.height/ 2)?);
?
???? //?add?the?sprite?as?a?child?to?this?layer
???? this->addChild(pSprite,? 0);
?
???? return? true;
}?
在这个函数里,创建了各个子元素,创建完之后,用addChild加入到主层上,上面的注释清晰的描述了步骤。
?
参考阅读:
1.cocos2d-x初探学习笔记(1)--HelloWorld?http://www.voidcn.com/article/p-oxnsnkkz-qk.html
2.cocos2d-x之HelloWorld范例分析(一)?http://www.lugw.net/?p=80005


?

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://www.cnblogs.com/captainbed

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读