zoukankan      html  css  js  c++  java
  • cocos2dx学习之旅(九): 2.2 盘古开天辟地,进入游戏世界

    混沌天地,盘古不忍寂寞,打掉自己的牙齿化作一把巨斧劈开天地,创造了宇宙万物,演化出生机勃勃的大千世界,让我们来扮演盘古,创造一个崭新的游戏世界。

    在游戏开发过程中,需要了解几个重要的概念:导演,场景,布景,角色和动作,既然我们扮演盘古,天地的演化就由我们来作主

    1.CCDirector(盘古):盘古用一把巨斧创造了世界,组织了天地万物,那么在游戏里,他就是游戏的创世神,制定游戏的规则,让场景 ,布景和宇宙万物有序地动作起来

    2.CCScene(天地):盘古用身体撑开天地,所谓天地,在游戏里就是我们常见的关卡,关卡主要由布景和角色组成。

    3.CCamera(太阳):日升日落,昼夜交替,万物得以生生不息。在游戏里,不同的角度,旋转,位置变化,缩放。

    4.CCLayer(山川大地): 盘古临死前,他嘴里呼出的气变成了春风和天空的云雾;肌肉变成千里沃野,供万物生

    存。 在游戏里,布景就是在每个场景里的背景,就是山川,大地,天空。

    5.CCSprite(众生万物):众生万物在大地上生活,栖息繁衍,不断进化,厮杀。游戏里人物行走,雄鹰翱翔,怪物横行,这些都可以由你自己创造。

    6.CCAction(动作):人类诞生,捕杀猎物。在游戏里,要生存,与怪物搏斗,就得拥有各种技能,动作,这就需要CCAction支持。

    第一步 :在HelloWorld的Init方法里加载游戏背景,用CCSprite加载start.jpg的资源文件作为游戏的开始背景

    //加载过场画面
    
    CCSize size = CCDirector::sharedDirector()->getWinSize();
    
    CCSprite* pSprite = CCSprite::create("start.jpg");
    
    CC_BREAK_IF(! pSprite);
    
    pSprite->setPosition(ccp(size.width/2, size.height/2));
    
    // Add the sprite to HelloWorld layer as a child layer.
    
    this->addChild(pSprite, 0);

    游戏中只有一个导演,所以CCDirector使用单例模式,为什么会使用单例模式,以及它的好处,我会在后面的章节单独谈到

    CCSprite初始化加载资源采用create方法,这是自cocos2d-x2.0后开始采用的,使用了autorelease自动管理内存,所以当我们使

    用时不必手动release掉内存

    clip_image001

    第二步:加载游戏的控制菜单

    在resoure.h中加入资源文件

    static const char s_playfont[] = "fonts/bitmapFontChinese.fnt";
    
    static const char s_start[] = "Start Game";
    
    static const char s_exit[] = "Exit Game";

    在加载完过场画面之后加载菜单

    //加载游戏菜单        
    
    CCLabelBMFont* startfontstyle=CCLabelBMFont::create(s_start,s_playfont);
    
    CCMenuItemLabel* startItem=CCMenuItemLabel::create(startfontstyle,this,menu_selector(HelloWorld::menuPlayNewGame));
    
    CCLabelBMFont* exitfontstyle=CCLabelBMFont::create(s_exit,s_playfont);
    
    CCMenuItemLabel* exitItem = CCMenuItemLabel::create(exitfontstyle,this,menu_selector(HelloWorld::menuCloseCallback));
    
    CCMenu* startMenu=CCMenu::create(startItem,exitItem, NULL);
    
    startMenu->alignItemsVertically();
    
    this->addChild(startMenu);

    游戏的菜单item:

    CCMenuItemSprite:使用图片sprite作为menu的菜单项

    CCLabelAtlas:设置好字库文件,并且以ascii字符排序顺序定义好字库的初始字符,就可以使用字库创建文本Label

    CCMenuItemLabel:以label方式创建的菜单项,会自动以点击放大作为菜单的操作效果来处理

    CCMenuItemFont:普通的文本菜单项

    CCLabelBMFont:使用字体的文本菜单项

    在HelloWorld.h中加入菜单回调方法的声明

        // a selector callback
        void menuCloseCallback(CCObject* pSender);
    
        void menuPlayNewGame(CCObject* sender);

    在HelloWorld.cpp中加入菜单回调方法

    void HelloWorld::menuCloseCallback(CCObject* pSender)
    {
    
    // "close" menu item clicked
    CCDirector::sharedDirector()->end();
    }
    
    void HelloWorld::menuPlayNewGame(CCObject* sender)
    {
    
    }

    clip_image002

    下一章节开始制作TMX游戏地图,并加载到我们的新场景当中.

  • 相关阅读:
    C# 插件构架实战(Jack H Hansen )
    .Net 中的反射(动态创建类型实例) Part.4
    css3新添加属性>calc()
    详解IIS Express的详细配置、使用和注意事项
    SpringBoot 整合 Shiro 实现登录拦截
    java MD5 加密
    MyBatis xml foreach循环语句
    java 考试系统 在线学习 视频直播 人脸识别 springboot框架 前后分离 PC和手机端
    Spring Boot 事物回滚
    allowedOrigins cannot contain the special value "*" gateway 报错
  • 原文地址:https://www.cnblogs.com/dekins/p/2659462.html
Copyright © 2011-2022 走看看