HelloWorld入门

HelloWorld入门
    代码解释:
        AppDelegate.h类是Cocos2d-x引擎要求实现的游戏应用委托对象,在Cocos2d-x游戏
    运行的不同生命周期阶段会触发他的不同函数
        AppDelegate继承了cocos2d::Application,是Cocos2d-x引擎提供的基类

    AppDelegate.h
        

 1 #ifndef  _APP_DELEGATE_H_
 2 #define  _APP_DELEGATE_H_
 3 
 4 #include "cocos2d.h"
 5 
 6 /**
 7 @brief    The cocos2d Application.
 8 
 9 The reason for implement as private inheritance is to hide some interface call by Director.
10 */
11 class  AppDelegate : private cocos2d::Application
12 {
13 public:
14     AppDelegate();
15     virtual ~AppDelegate();
16 
17     /**
18     @brief    Implement Director and Scene init code here.
19     @return true    Initialize success, app continue.
20     @return false   Initialize failed, app terminate.
21     */
22     /*
23         *游戏启动时调用的函数,在这里可以初始化导演对象和场景对象
24     */
25     virtual bool applicationDidFinishLaunching();
26 
27     /**
28     @brief  The function be called when the application enter background
29     @param  the pointer of the application
30     */
31     /*
32         *游戏进入后台时调用的函数
33     */
34     virtual void applicationDidEnterBackground();
35 
36     /**
37     @brief  The function be called when the application enter foreground
38     @param  the pointer of the application
39     */
40     /*
41         *游戏进入前台时调用的函数
42     */
43     virtual void applicationWillEnterForeground();
44 };
45 
46 #endif // _APP_DELEGATE_H_

 



        
        AppDelegate.cpp

 1 #include "AppDelegate.h"
 2 #include "HelloWorldScene.h"
 3 
 4 USING_NS_CC;//是用来替换using namespace cocos2d
 5 
 6 AppDelegate::AppDelegate() {
 7 
 8 }
 9 
10 AppDelegate::~AppDelegate()
11 {
12 }
13 
14 bool AppDelegate::applicationDidFinishLaunching() {
15     // initialize director
16     //初始化director
17     auto director = Director::getInstance();
18     auto glview = director->getOpenGLView();
19     if (!glview) {
20         glview = GLView::create("My Game");
21         director->setOpenGLView(glview);//设置导演类的OpenGL视图
22     }
23 
24     // turn on display FPS
25     //设置是否在屏幕上显示帧率等信息,一般是为了测试,实际发布时会影响游戏的外观,所以就不显示了
26     director->setDisplayStats(true);
27 
28     // set FPS. the default value is 1.0/60 if you don't call this
29     //设定定时器1.0/60秒间隔一次,即设定帧率为60
30     director->setAnimationInterval(1.0 / 60);
31 
32     // create a scene. it's an autorelease object
33     //创建场景的对象Sence
34     auto scene = HelloWorld::createScene();
35 
36     // run
37     //运行该场景,使游戏进入该场景
38     director->runWithScene(scene);
39 
40     return true;
41 }
42 
43 // This function will be called when the app is inactive. When comes a phone call,it's be invoked too
44 void AppDelegate::applicationDidEnterBackground() {
45     //停止场景中的动画
46     Director::getInstance()->stopAnimation();
47 
48     // if you use SimpleAudioEngine, it must be pause
49     //停止背景音乐
50     // SimpleAudioEngine::getInstance()->pauseBackgroundMusic();
51 }
52 
53 // this function will be called when the app is active again 
54 void AppDelegate::applicationWillEnterForeground() {
55     //开始游戏场景中的动画
56     Director::getInstance()->startAnimation();
57 
58     // if you use SimpleAudioEngine, it must resume here
59     //继续背景音乐
60     // SimpleAudioEngine::getInstance()->resumeBackgroundMusic();
61 }

 



        HelloWorld类继承cocos2d::Layer类,他被成为层(layer),这些层被放到场景(scene)场景类是cocos2d::Scene
        
        HelloWorldScene.h
        

 1 #ifndef __HELLOWORLD_SCENE_H__
 2 #define __HELLOWORLD_SCENE_H__
 3 
 4 #include "cocos2d.h"
 5 
 6 class HelloWorld : public cocos2d::Layer//继承了Layer是一个层不是场景
 7 {
 8 public:
 9     // there's no 'id' in cpp, so we recommend returning the class instance pointer
10     // 声明创建当前层HelloWorld所在场景的静态函数createScene()
11     static cocos2d::Scene* createScene();
12 
13     // Here's a difference. Method 'init' in cocos2d-x returns bool, instead of returning 'id' in cocos2d-iphone
14     virtual bool init();//初始化层的实例函数
15     
16     // a selector callback
17     void menuCloseCallback(cocos2d::Ref* pSender);//声明菜单回掉函数,用于触摸菜单时间的回掉
18     
19     // implement the "static create()" method manually
20     CREATE_FUNC(HelloWorld);//创建一个静态函数create,可以创建层
21 };
22 
23 #endif // __HELLOWORLD_SCENE_H__

 



        
        
        HelloWorldScene.cpp

  1 #include "HelloWorldScene.h"
  2 
  3 USING_NS_CC;
  4 
  5 /*
  6     *做了三件事,首先创建HelloWorld层所在的场景对象
  7     *其次创建类HelloWorld层
  8     *最后将HelloWorld层添加到场景scene中
  9 */
 10 Scene* HelloWorld::createScene()
 11 {
 12     // 'scene' is an autorelease object
 13     auto scene = Scene::create();//创建HelloWorld层所在的场景对象
 14     
 15     // 'layer' is an autorelease object
 16     auto layer = HelloWorld::create();//创建类HelloWorld层
 17 
 18     // add layer as a child to scene
 19     scene->addChild(layer);//最后将HelloWorld层添加到场景scene中
 20 
 21     // return the scene
 22     return scene;
 23 }
 24 
 25 // on "init" you need to initialize your instance
 26 bool HelloWorld::init()
 27 {
 28     //////////////////////////////
 29     // 1. super init first
 30     //初始化父类Layer
 31     if ( !Layer::init() )
 32     {
 33         return false;
 34     }
 35     
 36     //定义视图的可视化尺寸
 37     Size visibleSize = Director::getInstance()->getVisibleSize();
 38     //定义视图的可视化原点
 39     Vec2 origin = Director::getInstance()->getVisibleOrigin();
 40 
 41     /////////////////////////////
 42     // 2. add a menu item with "X" image, which is clicked to quit the program
 43     //    you may modify it.
 44 
 45     // add a "close" icon to exit the progress. it's an autorelease object
 46     //增加一个菜单项,单击它的时候退出程序
 47     //创建一个图片菜单项对象,单击该菜单项的时候回掉menuCloseCallback函数
 48     auto closeItem = MenuItemImage::create(
 49                                            "CloseNormal.png",
 50                                            "CloseSelected.png",
 51                                            CC_CALLBACK_1(HelloWorld::menuCloseCallback, this));
 52     //菜单项的位置
 53     closeItem->setPosition(Vec2(origin.x + visibleSize.width - closeItem->getContentSize().width/2 ,
 54                                 origin.y + closeItem->getContentSize().height/2));
 55 
 56     // create menu, it's an autorelease object
 57     //创建Menu菜单对象
 58     auto menu = Menu::create(closeItem, NULL);
 59     //定义菜单对象的位置
 60     menu->setPosition(Vec2::ZERO);
 61     //把菜单项对象添加到当前层上
 62     this->addChild(menu, 1);
 63 
 64     /////////////////////////////
 65     // 3. add your codes below...
 66 
 67     // add a label shows "Hello World"
 68     // create and initialize a label
 69     //在下面添加自己的代码
 70     //创建一个LabelTTF标签对象
 71     auto label = LabelTTF::create("Hello World", "Arial", 24);
 72     
 73     // position the label on the center of the screen
 74     //设置标签对象位置为水平居中,在垂直方向上与屏幕顶对齐
 75     label->setPosition(Vec2(origin.x + visibleSize.width/2,
 76                             origin.y + visibleSize.height - label->getContentSize().height));
 77 
 78     // add the label as a child to this layer
 79     //将文本对象添加到层中
 80     this->addChild(label, 1);
 81 
 82     // add "HelloWorld" splash screen"
 83     //创建精灵Sprite对象
 84     auto sprite = Sprite::create("HelloWorld.png");
 85 
 86     // position the sprite on the center of the screen
 87     //设置精灵对象的位置,是屏幕的中央
 88     sprite->setPosition(Vec2(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y));
 89 
 90     // add the sprite as a child to this layer
 91     //将精灵添加到层中
 92     this->addChild(sprite, 0);
 93     
 94     return true;
 95 
 96 }
 97 
 98 
 99 void HelloWorld::menuCloseCallback(Ref* pSender)
100 {
101     //CC_TARGET_PLATFORM读取当前运行的平台的宏
102 #if (CC_TARGET_PLATFORM == CC_PLATFORM_WP8) || (CC_TARGET_PLATFORM == CC_PLATFORM_WINRT)
103     MessageBox("You pressed the close button. Windows Store Apps do not implement a close button.","Alert");
104     return;
105 #endif
106 
107     Director::getInstance()->end();
108 
109 #if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
110     exit(0);
111 #endif
112 }

 

posted @ 2015-04-05 21:53  silent-bobo  阅读(925)  评论(0编辑  收藏  举报