zoukankan      html  css  js  c++  java
  • 游戏基础元素——Cocos2d-x学习历程(八)

    1.Director:导演

      从字面上理解,这是一个"导演"类,Director是控制游戏流程的主要组件。CCDirector的工作确实跟导演非常类似,主要负责以下工作:

      游戏呈现方面的设定,包括设定游戏呈现的窗口、FPS显示、默认帧率上限、纹理颜色位宽等。

      切换当前的游戏场景,暂停或恢复游戏场景的运行。

      因为Director是游戏项目的总导演,会经常调用进行一些控制,所以该Director利用了单件设计模式,也就是项目里取到的director都是同一个。

      用getInstance() 方法取得Director的实例。

    2.Scene:场景

      Scene场景也是cocos2dx中必不可少的元素,游戏中通常我们需要构建不同的场景(至少一个),游戏里关卡、版块的切换也就是一个一个场景的切换,就像在电影中变

    换舞台和场地一样。场景的一个重要的作用就是流程控制的作用,我们可以通过Director的一系列方法控制游戏中不同的场景的自由切换。

      下面是Director控制场景的常用方法:

    • runWithScene( Scene *scene )  启动游戏,并运行scene场景。

            本方法在主程序第一次启动主场景的时候调用。如果已有正在运行的场景则不能调用该方法;会调用pushScene-->startAnimation。

    • pushScene( Scene *scene )  将当前运行中的场景暂停并压入到代码执行场景栈中,再将传入的scene设置为当前运行场景。

            只有存在正在运行的场景时才调用该方法;

    • replaceScene( Scene *scene )  直接使用传入的scene替换当前场景来切换画面,当前场景被释放。

            这是切换场景时最常用的方法。

    • popScene()  释放当前场景,再从代码执行场景中弹出栈顶的场景,并将其设置为当前运行场景。

            如果栈为空,直接结束应用。和PushScene结对使用。

    • end()  释放和终止执行场景,同时退出应用
    • pause()  暂停当前运行场景中的所有计时器和动作,场景仍然会显示在屏幕上
    • resume ()  恢复当前运行场景的所有计时器和动作,场景仍然会显示在屏幕上

        值得注意的一点是,以上三种切换场景的方法(replaceScene、pushScene、popScene)均是先将待切换的场景完全加载完毕后,才将当前运行的场景释放掉。所以,在新场景恰好完全加载完毕的瞬间,系统中同时存在着两个场景,这将是对内存的一个考验,若不注意的话,切换场景可能会造成内存不足。

        通常,场景之间需要一定的过渡衔接效果,否则,场景的切换会显得十分突兀。为此,Cocos2d-x提供了很多华丽的场景切换特效,例如翻页、波浪、淡出淡入等。这些特效是通过派生自CCScene的CCTransitionScene系列特效类来实现的。我们也可以模仿Cocos2d-x内置的场景切换特效代码,来编写属于自己的特效。

    3.Layer:层

       Layer是处理玩家事件响应的Node子类。与场景不同,层通常包含的是直接在屏幕上呈现的内容,并且可以接受用户的输入事件,包括触摸,加速度计和键盘输入等。我们需要在层中加入精灵,文本标签或者其他游戏元素,并设置游戏元素的属性,比如位置,方向和大小;设置游戏元素的动作等。通常,层中的对象功能类似,耦合较紧,与层中游戏内容相关的逻辑代码也编写在层中,在组织好层后,只需要把层按照顺序添加到场景中就可以显示出来了。要向场景添加层,我们可以使用addChild方法。

    void addChild(CCNode* child);
    void addChild(CCNode* child, int zOrder);
    void addChild(CCNode* child, int zOrder, int tag);

       其中,Child参数就是节点。对于场景而言,通常我们添加的节点就是层。先添加的层会被置于后添加的层之下。如果需要为它们指定先后次序,可以使用不同的zOrder值。tag是元素的标识号码,如果为子节点设置了tag值,就可以在它的父节点中利用tag值就可以找到它了。层可以包含任何Node作为子节点,包括Sprites(精灵), Labels(标签),甚至其他的Layer对象。

    4.纹理

        在介绍精灵前,我们先介绍纹理的概念。我们可以认为纹理就是一张图片,这张图片被精灵显示出来。更深层地讲,纹理是3D游戏中绘制到物体表面上的图案。虽然Cocos2d-x是平面游戏引擎,但它仍然使用了3D绘图库OpenGL。这样一来,我们既可以利用图形加速器提高绘图效率,也可以在游戏中加入3D变换特效,实现更绚丽的效果。为了在3D环境中绘制平面图形,Cocos2d-x只需在3D空间中垂直于视线的平面上绘制矩形,在矩形的表面使用纹理贴图即可。

    5.精灵

        Sprite可以说是游戏中最重要的组成元素,它描述了游戏中的精灵,是Node的一个最重要也最灵活的子类。说它重要是因为Sprite代表了游戏中一个最小的可见单位,说它灵活则是由于其装载了一个平面纹理,具有丰富的表现力,而且可以通过多种方式加载。如果说Scene和Layer代表了宏观的游戏元素管理,那么Sprite则为微观世界提供了丰富灵活的细节表现。从游动的鱼、飞行的子弹到可旋转的炮台,都可以通过Sprite实现。

  • 相关阅读:
    学完这 4 个小技巧,让你的移动端交互体验更加优秀
    Angular 项目搭建
    需求分析--分析需求
    需求分析--收集需求
    黑苹果+win 双系统 单硬盘安装
    小程序反编译
    计算机硬件基础(软考-网络中级)
    intellij idea 使用教程
    idea安装步骤
    volatile能保证有序性
  • 原文地址:https://www.cnblogs.com/ling-mo/p/4452632.html
Copyright © 2011-2022 走看看