cocos2d学习(04)——HelloWorld类分析
发布时间:2020-12-14 19:28:44 所属栏目:百科 来源:网络整理
导读:HelloWorld类分析 先看一下类图 HelloWorld类一共有四个成员函数。四个函数都比较不一般。 CREATE_FUNC是一个宏定义的成员函数,其在预处理阶段被替换。 下面一个一个来分析这些函数。这个设计得挺好的,就是注释写得不合我意,只怪当年没有努力学英语。 CRE
HelloWorld类分析
CREATE_FUNC 创建create 1: CREATE_FUNC(HelloWorld);
2: ////上面的宏替换后为以下内容 3: static helloworld* create() 4: {//调用构造函数,创建一个helloworld对象 5: helloworld *pret = new helloworld(); 6: if (pret && pret->init()) 7: { //上面调用了init函数,如果对象创建成功且init成功 8: pret->autorelease(); //自动释放对象 9: return pret; 10: }
11: else 12: { //delete并非无意义,在init失败的时候释放,短路操作pret!=NULL 13: delete pret; 14: pret = null;
15: return null; 16: }
17: }
Init初始化 1: // on "init" you need to initialize your instance
2: bool HelloWorld::init() 3: {
4: ////////////////////////////// 5: // 1. super init first 6: //首先进行超类(被继承的类,就是基类。不建议用超类这个词,有歧义)的初始化 7: if ( !CCLayer::init() ) 8: { //对基类的是init不成功,返回false给调用者(create函数) 9: return false; 11:
12: CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();
13: CCPoint origin = CCDirector::sharedDirector()->getVisibleOrigin();
14:
15: ///////////////////////////// 16: // 2. add a menu item with "X" image,which is clicked to quit the program 17: //再加上“X”图像菜单项,并点击它来退出程序 18: // you may modify it. 19: // 你可以修改它。 20: // add a "close" icon to exit the progress. it's an autorelease object 21: // 添加一个“close”图标用于退出进程 。这是一个自动释放对象 22: CCMenuItemImage *pCloseItem = CCMenuItemImage::create(
23: "CloseNormal.png", 24: "CloseSelected.png",monospace; width: 100%; border-bottom-style: none; color: black; padding-bottom: 0px; direction: ltr; text-align: left; padding-top: 0px; border-right-style: none; padding-left: 0px; margin: 0em; border-left-style: none; line-height: 16pt; padding-right: 0px; background-color: white"> 25: this,monospace; width: 100%; border-bottom-style: none; color: black; padding-bottom: 0px; direction: ltr; text-align: left; padding-top: 0px; border-right-style: none; padding-left: 0px; margin: 0em; border-left-style: none; line-height: 16pt; padding-right: 0px; background-color: #f4f4f4"> 26: menu_selector(HelloWorld::menuCloseCallback)); 27:
28: pCloseItem->setPosition(ccp(origin.x + visibleSize.width - pCloseItem->getContentSize().width/2,monospace; width: 100%; border-bottom-style: none; color: black; padding-bottom: 0px; direction: ltr; text-align: left; padding-top: 0px; border-right-style: none; padding-left: 0px; margin: 0em; border-left-style: none; line-height: 16pt; padding-right: 0px; background-color: white"> 29: origin.y + pCloseItem->getContentSize().height/2)); 30:
31: // create menu,it's an autorelease object 32: // 创建menu对象,也是自动释放的 33: CCMenu* pMenu = CCMenu::create(pCloseItem,NULL);
34: //设置位置为CCPintZero,其实就是原点ccp(0,0) 35: pMenu->setPosition(CCPointZero);
36: //添加到layer 37: this->addChild(pMenu,1); 38:
39: ///////////////////////////// 40: // 3. add your codes below... 41: // 添加你自己的代码到这下面 42: // add a label shows "Hello World" 43: // 添加一个label用来显示"Hello World",可以修改为别的,中文支持不好。可以简单将源文件修改为UTF8格式来支持中文。 44: // create and initialize a label 45: // 创建一个label并初始化 46: CCLabelTTF* pLabel = CCLabelTTF::create("Hello World","Arial",24); 47:
48: // position the label on the center of the screen 49: // 设置lable的位置在屏幕的中间(中央),其实是这个程序OpenGLView的中央 50: pLabel->setPosition(ccp(origin.x + visibleSize.width/2,monospace; width: 100%; border-bottom-style: none; color: black; padding-bottom: 0px; direction: ltr; text-align: left; padding-top: 0px; border-right-style: none; padding-left: 0px; margin: 0em; border-left-style: none; line-height: 16pt; padding-right: 0px; background-color: white"> 51: origin.y + visibleSize.height - pLabel->getContentSize().height)); 52:
53: // add the label as a child to this layer 54: // 把创建的label作为一个孩子添加到这个layer层。(layer上放置Child) 55: this->addChild(pLabel,monospace; width: 100%; border-bottom-style: none; color: black; padding-bottom: 0px; direction: ltr; text-align: left; padding-top: 0px; border-right-style: none; padding-left: 0px; margin: 0em; border-left-style: none; line-height: 16pt; padding-right: 0px; background-color: #f4f4f4"> 56: 57: // add "HelloWorld" splash screen" 58: // 用HelloWorld.png来创建一个 Sprite(精灵) 59: CCSprite* pSprite = CCSprite::create("HelloWorld.png"); 60:
61: // position the sprite on the center of the screen 62: // 把上面刚刚创建的精灵的(放置的)位置为窗口的中央 63: pSprite->setPosition(ccp(visibleSize.width/2 + origin.x,visibleSize.height/2 + origin.y));
64:
65: // add the sprite as a child to this layer 66: // 把上面创建的精灵sprite也添加到layer 67: this->addChild(pSprite,0); 68:
69: return true; 70: }
menuCloseCallback菜单回调 1: void HelloWorld::menuCloseCallback(CCObject* pSender)
2: {
3: // 各个不同的平台标识 4: /********************************************************* 5: #define CC_PLATFORM_UNKNOWN 0 6: #define CC_PLATFORM_IOS 1 7: #define CC_PLATFORM_ANDROID 2 8: #define CC_PLATFORM_WIN32 3 9: #define CC_PLATFORM_MARMALADE 4 10: #define CC_PLATFORM_LINUX 5 11: #define CC_PLATFORM_BADA 6 12: #define CC_PLATFORM_BLACKBERRY 7 13: #define CC_PLATFORM_MAC 8 14: #define CC_PLATFORM_NACL 9 15: #define CC_PLATFORM_EMSCRIPTEN 10 16: #define CC_PLATFORM_TIZEN 11 17: #define CC_PLATFORM_WINRT 12 18: #define CC_PLATFORM_WP8 13 19:
20: #define CC_TARGET_PLATFORM CC_PLATFORM_WIN32 21: **********************************************************/ 22: //进行平台的判断,这里是win32平台,其他的平台应该是不一样的 23: #if (CC_TARGET_PLATFORM == CC_PLATFORM_WINRT) || (CC_TARGET_PLATFORM == CC_PLATFORM_WP8) 24: //WinRT和WindowsPhone8结束,其没有。。。 25: CCMessageBox("You pressed the close button. Windows Store Apps do not implement a close button.","Alert"); 26: #else 27: CCDirector::sharedDirector()->end(); //导演end结束了 28: #if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS) 29: exit(0); //IOS平台多做一步 30: #endif 31: #endif 32: }
Scene场景 1: CCScene* HelloWorld::scene()
3: // 'scene' is an autorelease object 4: // 场景也是自动释放对象的.看cocos2d3.0中间大量用到了C++11的特性,不想看了 5: // 这里创建一个scene场景,调用的是场景的创建方法 6: CCScene *scene = CCScene::create();
7: // CCScene *CCScene::create() 8: // { 9: // CCScene *pRet = new CCScene(); 10: // if (pRet && pRet->init()) 11: // { 12: // pRet->autorelease(); 13: // return pRet; 14: // } 15: // else 16: // { 17: // CC_SAFE_DELETE(pRet); 18: // return NULL; 19: // } 20: // } 21: // 'layer' is an autorelease object 22: // layer也是自动释放对象的 23: // 这个layer是HelloWorld的对象指针 24: HelloWorld *layer = HelloWorld::create();
25:
26: // add layer as a child to scene 27: // 把layer添加到scene上去 28: scene->addChild(layer);
29:
30: // return the scene 31: return scene; 32: //返回scene指针给调用者(AppDelegate::applicationDidFinishLaunching()) 33: }
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |