• 【Cocos2d入门教程三】HelloWorld之一目了然


    什么程序都是从HelloWorld先开始。同样Cocos2d-x我们先从HelloWorld进行下手、下面是HelloWorld的运行完成图:

     

    建立好的Cocos游戏项目中会有两个比较常用接触的文件夹。分别为Classes与resource。Classes存取代码文件,resource存取资源文件,下面为完整的项目架构:

    我们先来看下最基本的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(),实现了创建场景的过程::

    1、创建场景

    2、创建层

    3、将层加到场景上

    4、返回场景


    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(),实现了初始化:

    1、初始化父类的Layer

    2、得到窗口的大小

    3、得到窗口的坐标

    4、创建菜单项

    5、设置菜单项的位置

    6、设置菜单的位置

    7、将菜单加到层中

    8、创建标签

    9、设置标签的位置

    10、将标签加到层上

    11、创建精灵

    12、设置精灵的位置

    13、将精灵加到层上

     

     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的解析就分享至此。下一章进入菜单篇的学习



     
     
     
  • 相关阅读:
    day39
    day36
    day35
    day34
    深入理解css的margin
    git使用
    java常见的分页实现方式
    jquery常识
    与border不得不说的故事
    测试效果
  • 原文地址:https://www.cnblogs.com/advances/p/4716089.html
Copyright © 2020-2023  润新知