zoukankan      html  css  js  c++  java
  • cocos基础教程(4)基础概念介绍

    在Cocos2d-x-3.x引擎中,采用节点树形结构来管理游戏对象,一个游戏可以划分为不同的场景,一个场景又可以分为不同的层,一个层又可以拥有任意个可见的游戏节点(即对象,游戏中基本上所有的类都派生于节点类Node)。可以执行Action来修改游戏节点的属性,使其移动、旋转、放大、缩小等等。

    每一个时刻都有一个场景在独立运行,通过切换不同的场景来完成一个游戏流程,游戏流程的管理由Director来执行,其基本框架类图如下:

    导演(Director)

    游戏中的一些常用操作就是由Director来控制的,比如OpenGL ES的初始化,场景的转换,游戏暂停继续的控制,世界坐标和GL坐标之间的切换,对节点(游戏元素)的控制等,还有一些游戏数据的保存调用,屏幕尺寸的获取等都要由Director类来管理控制的,用getInstance() 方法取得Director的实例。

    场景(Scene)

    游戏中通常我们需要构建不同的场景(至少一个),游戏里关卡、版块的切换也就是一个一个场景的切换,我们可以通过Director的一系列方法控制游戏中不同的场景的自由切换。

    Director控制场景的常用方法:

    • runWithScene( Scene *scene ) 启动游戏,并运行scene场景。本方法在主程序第一次启动主场景的时候调用。如果已有正在运行的场景则不能调用该方法;会调用pushScene-->startAnimation。
    • pushScene( Scene *scene ) 将当前运行中的场景暂停并压入到代码执行场景栈中,再将传入的scene设置为当前运行场景,只有存在正在运行的场景时才调用该方法;
    • replaceScene( Scene *scene ) 直接使用传入的scene替换当前场景来切换画面,当前场景被释放。这是切换场景时最常用的方法。
    • popScene() 释放当前场景,再从代码执行场景中弹出栈顶的场景,并将其设置为当前运行场景。如果栈为空,直接结束应用。和PushScene结对使用
    • end() 释放和终止执行场景,同时退出应用
    • pause() 暂停当前运行场景中的所有计时器和动作,场景仍然会显示在屏幕上
    • resume () 恢复当前运行场景的所有计时器和动作,场景仍然会显示在屏幕上

    层(Layer)

    Layer是处理玩家事件响应的Node子类。与场景不同,层通常包含的是直接在屏幕上呈现的内容,并且可以接受用户的输入事件,包括触摸,加速度计和键盘输入等。我们需要在层中加入精灵,文本标签或者其他游戏元素,并设置游戏元素的属性,比如位置,方向和大小;设置游戏元素的动作等。要向场景添加层,我们可以使用addChild方法。

    addChild( Node child )

    addChild( Node child, int zOrder )

    addChild( Node *child, int zOrder, int tag )

    精灵(sprite)

    Cocos2d中的精灵和其他游戏引擎中的精灵相似,它可以移动,旋转,缩放,执行动画,并接受其他转换。Cocos2dx的Sprite由Texure,frame和animation组成,由openes负责渲染。主要的类关系如下:  简单过程可描述为:使用Texture2D加载图片,可以用Texture2D生成对应的SpriteFrame(精灵帧),将SpriteFrame添加到Animation生成动画数据,用Animation生成Animate(就是最终的动画动作),最后用Sprite执行这个动作。

    创建精灵的几种方式:

    • 直接创建:
        auto sprite = Sprite::create("HelloWorld.png");      
        this->addChild(sprite,0);
    • 使用纹理来创建精灵
        auto sprite1 = Sprite::createWithTexture(TextureCache::getInstance()->addImage("HelloWorld.png"));
        this->addChild(sprite1, 0);
    • 使用精灵帧来创建精灵
        auto sprite2=Sprite::createWithSpriteFrameName("HelloWorld.png");  
        this->addChild(sprite2, 0);

    在Cocos2dx中实现精灵显示的基本过程如下:

    //创建Scene
    auto scene = Scene::create();
    //创建层
    auto layer = HelloWorld::create();
    //把层加入场景中
    scene->addChild(layer);
    //创建一个精灵
    auto sprite = Sprite::create("HelloWorld.png");
    //把精灵加到层里
    layer->addChild(sprite, 0);
  • 相关阅读:
    BZOJ 3531[Sdoi2014]旅行
    BZOJ4998 星球联盟
    BZOJ2959 长跑
    【北京集训D2T3】tvt
    [Bzoj]5343: [Ctsc2018]混合果汁
    HGOI20190810 省常中互测3
    HGOI20190809 省常中互测2
    HGOI20190808 省常中互测1
    组合排列和组合数 学习笔记
    2-SAT (two-statisfiability) 算法 学习笔记
  • 原文地址:https://www.cnblogs.com/damowang/p/4810313.html
Copyright © 2011-2022 走看看