【Cocos2d入門教程三】HelloWorld之一目瞭然

什麼程序都是從HelloWorld先開始。一樣Cocos2d-x咱們先從HelloWorld進行下手、下面是HelloWorld的運行完成圖:架構

 

創建好的Cocos遊戲項目中會有兩個比較經常使用接觸的文件夾。分別爲Classes與resource。Classes存取代碼文件,resource存取資源文件,下面爲完整的項目架構:app

 

咱們先來看下最基本的AppDelegate.cpp類函數

  1 #include "AppDelegate.h"
  2 #include "HelloWorldScene.h"
  3  
  4  
  5 //命名空間
  6 USING_NS_CC;
  7  
  8  
  9 //構造函數
 10 AppDelegate::AppDelegate() {
 11  
 12 }
 13  
 14  
 15 //析構函數
 16 AppDelegate::~AppDelegate() 
 17 {
 18 }
 19  
 20  
 21 //程序啓動完成後會進入的函數  
 22 bool AppDelegate::applicationDidFinishLaunching() {
 23      
 24     //初始化導演
 25     auto director = Director::getInstance();
 26  
 27     //得到OpenGL視圖
 28     auto glview = director->getOpenGLView();
 29  
 30     //若是沒有獲取OpenGL視圖
 31     if(!glview) 
 32     {
 33         //建立OpenGL視圖
 34         glview = GLView::create("My Game");
 35  
 36         //設置OpenGL視圖
 37         director->setOpenGLView(glview);
 38     }
 39  
 40     //設置是否顯示調試信息
 41     director->setDisplayStats(true);
 42  
 43     //設置幀率
 44     director->setAnimationInterval(1.0 / 60);
 45  
 46     //調用場景
 47     auto scene = HelloWorld::createScene();
 48  
 49     //執行場景
 50     director->runWithScene(scene);
 51  
 52     return true;
 53 }
 54  
 55  
 56 //當程序進入後臺後調用的函數(當在玩遊戲時突然別人打來電話時,程序進入後臺)  
 57 void AppDelegate::applicationDidEnterBackground() {
 58     
 59     //中止播放動畫
 60     Director::getInstance()->stopAnimation();
 61  
 62     //暫停播放背景音樂
 63     //SimpleAudioEngine::getInstance()->pauseBackgroundMusic();
 64 }
 65  
 66  
 67 //當程序從新被激活的時候調用的函數(聲音從新響起)  
 68 void AppDelegate::applicationWillEnterForeground() {
 69      
 70     //播放動畫
 71     Director::getInstance()->startAnimation();
 72  
 73     //繼續播放背景音樂
 74     //SimpleAudioEngine::getInstance()->resumeBackgroundMusic();
 75 }
 76 
 77 
 78 HelloWorld.h文件
 79 
 80 #ifndef __HELLOWORLD_SCENE_H__
 81 #define __HELLOWORLD_SCENE_H__
 82  
 83 #include "cocos2d.h"
 84  
 85 //HelloWorld類繼承自Layer類
 86 class HelloWorld : public cocos2d::Layer
 87 {
 88 public:
 89     //建立場景
 90     static cocos2d::Scene* createScene();
 91  
 92     //初始化層
 93     virtual bool init();  
 94      
 95     //菜單響應函數
 96     void menuCloseCallback(cocos2d::Ref* pSender);
 97      
 98     //用於建立:場景、菜單、層等東西  
 99     CREATE_FUNC(HelloWorld);
100 };
101  
102 #endif 
HelloWorldScene.cpp中的代碼中的Scene* HelloWorld::scene(),實現了建立場景的過程::

一、建立場景學習

二、建立層字體

三、將層加到場景上動畫

四、返回場景this


HelloWorld.cpp
 1 #include "HelloWorldScene.h"
 2  
 3 //命名空間
 4 USING_NS_CC;
 5  
 6 //建立場景
 7 Scene* HelloWorld::createScene()
 8 {
 9     //建立場景
10     auto scene = Scene::create();
11      
12     //建立層
13     auto layer = HelloWorld::create();
14  
15     //將層添加到場景中
16     scene->addChild(layer);
17  
18     //返回場景
19     return scene;
20 }
21  
22 //初始化層
23 bool HelloWorld::init()
24 {
25     //初始化父類的Layer
26     if(!Layer::init())
27     {
28         return false;
29     }
30      
31     //得到窗口的大小
32     Size visibleSize = Director::getInstance()->getVisibleSize();
33  
34     //得到座標原點的座標
35     Vec2 origin = Director::getInstance()->getVisibleOrigin();
36  
37      //用圖片建立菜單項  
38      //第一個參數:正常狀態下的圖片  
39      //第二個參數:被選中時的圖片  
40      //第三個參數:響應函數  
41     auto closeItem = MenuItemImage::create(
42                                            "CloseNormal.png",
43                                            "CloseSelected.png",
44                                            CC_CALLBACK_1(HelloWorld::menuCloseCallback, this));
45      
46     //設置菜單項的位置
47     closeItem->setPosition(Vec2(origin.x + visibleSize.width - closeItem->getContentSize().width/2 ,
48                                 origin.y + closeItem->getContentSize().height/2));
49  
50     //建立菜單
51     auto menu = Menu::create(closeItem, NULL);
52    
53     //設置菜單的座標原點爲左下角(菜單中默認的座標原點在窗口的中央)  
54     menu->setPosition(Vec2::ZERO);
55  
56     //將菜單項添加到菜單中
57     this->addChild(menu, 1);
58  
59     //建立一個標籤  
60     //第一個參數:標籤中的內容  
61     //第二個參數:字體  
62     //第三個參數:字體大小  
63     auto label = LabelTTF::create("Hello World", "Arial", 24);
64      
65     //設置標籤的位置
66     label->setPosition(Vec2(origin.x + visibleSize.width/2,
67                             origin.y + visibleSize.height - label->getContentSize().height));
68  
69    //設置標籤的位置
70     this->addChild(label, 1);
71  
72     //建立一個精靈
73     auto sprite = Sprite::create("HelloWorld.png");
74  
75     //設置精靈的位置
76     sprite->setPosition(Vec2(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y));
77  
78     //將精靈添加到層中
79     this->addChild(sprite, 0);
80      
81     return true;
82 }
83  
84 //菜單響應函數
85 void HelloWorld::menuCloseCallback(Ref* pSender)
86 {
87 #if (CC_TARGET_PLATFORM == CC_PLATFORM_WP8) || (CC_TARGET_PLATFORM == CC_PLATFORM_WINRT)
88     MessageBox("You pressed the close button. Windows Store Apps do not implement a close button.","Alert");
89     return;
90 #endif
91  
92     //結束場景
93     Director::getInstance()->end();
94  
95 #if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
96     exit(0);
97 #endif
98 }

HelloWorldScene.cpp中的 HelloWorld::init(),實現了初始化:spa

一、初始化父類的Layer調試

二、獲得窗口的大小code

三、獲得窗口的座標

四、建立菜單項

五、設置菜單項的位置

六、設置菜單的位置

七、將菜單加到層中

八、建立標籤

九、設置標籤的位置

十、將標籤加到層上

十一、建立精靈

十二、設置精靈的位置

1三、將精靈加到層上

 

 1 #include "main.h"
 2 #include "AppDelegate.h"
 3 #include "cocos2d.h"
 4  
 5 //命名空間
 6 USING_NS_CC;
 7  
 8 //Cocos2d-X的主函數(至關於C/C++中的main函數)  
 9 int APIENTRY _tWinMain(HINSTANCE hInstance,
10                        HINSTANCE hPrevInstance,
11                        LPTSTR    lpCmdLine,
12                        int       nCmdShow)
13 {
14     //表示lpCmdLine、nCmdShow是兩個沒用的參數  
15     UNREFERENCED_PARAMETER(hPrevInstance);
16     UNREFERENCED_PARAMETER(lpCmdLine);
17  
18      //定義一個app對象  
19     AppDelegate app;
20  
21     //執行app對象的run函數。進入幀循環  
22     return Application::getInstance()->run();
23 }

 

 

main.cpp中的代碼只是實現了下面的操做

定義一個App對象->執行App對象進入幀循環

一個遊戲程序就這樣執行起來,應運而生,是否是感受特別的神奇。ok關於helloworld的解析就分享至此。下一章進入菜單篇的學習

相關文章
相關標籤/搜索