微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Cocos2d-x从入门到精通第九课《Director,Scene,Layer,Sprite的关系》

一. 总览

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

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

一,导演Director

一款游好比一部影,只是游具有更的交互性,不的基本原理是一致的。所以在Cocos2dx中把筹游大局的抽象为导演(Director),Director是整个cocos2dx引擎的核心,是整个游,游中的一些常用操作就是由Director来控制的,比如OpenGLES的初始化,景的转换,游戏暂继续的控制,世界坐GL的切对节点(游元素)的控制等,有一些游数据的保存用,屏幕尺寸的取等都要由Director来管理控制的。

Director是游戏项目的总导演,会行一些控制,所以Director利用了设计模式,也就是目里取到的director都是同一个。用getInstance()方法取得Director例,具体的API可以参考相关文档,就不做述了。

二,场景Scene

Scene景也是cocos2dx中必不可少的元素,游中通常我需要构建不同的景(至少一个),游里关卡、版的切也就是一个一个景的切,就像在影中变换舞台和地一景的一个重要的作用就是流程控制的作用,我可以通Director的一系列方法控制游中不同的景的自由切

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

runWithScene(Scene *scene )

启动游戏并运行scene场景方法在主程序第一次启动主场景的时候调用如果已有正在运行的场景则不能调用方法调用pushScene-->startAnimation

·pushScene( Scene *scene )

·将当前运行中的场景暂停并压入到代码执行场景栈中再将传入的scene设置为当前运行场景只有存在正在运行的场景时才调用方法

·replaceScene( Scene *scene )

·直接使用传入的scene替换当前场景来切换画面当前场景被释放这是切换场景时最常用的方法

·popScene() 释放当前场景再从代码执行场景中弹出栈顶的场景并将其设置为当前运行场景如果栈为空直接结束应用PushScene结对使用

·end() 释放和终止执行场景同时退出应用

·pause() 暂停当前运行场景中的所有计时器和动作场景仍然会显示在屏幕上

·resume () 恢复当前运行场景的所有计时器和动作场景仍然会显示在屏幕上

时场景是的容器,包含了所有需要示的游元素。通常,当我需要完成一个候,会一个Scene的子,并在子实现需要的功能。比如,我可以在子的初始化中入游戏资源,为场添加,启播放等等。

三,层Layer

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

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

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

四,精灵(Sprite)

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

看完大家估会感不知所云,是的,我看到话也是这样的感觉,这话比文言文都难懂呀,那么我们该如何理解精灵呢,这个很好解决,我来给大家总结一下就行了,当然我总结的就相对通俗易懂多了,哈哈。

我对于精灵的理解:所谓精灵,其实就是一个四边形,这个四边形可以加载显示图片和序列帧图片。同时它的四个顶点的位置,色彩,透明度等信息可以被我们控制和改变。精灵,是我们对于图型图像进行控制的基础操作物体。

看了总结是不是感觉对精灵有点清晰的认知了呢。

五,相互之间的关系

通过上面的介绍大家应该对Director ,Scene ,Layer,Sprite有了初步的认识,那么它们是如果通过联系组合来为大家呈现一个绚丽多彩的游戏的呢,这个我们就通过代码来看一下。我们新建一个叫HelloLesson9的工程,具体怎么新建工程就不在讲解了,创建完成后打开Appdelegate,找到如下代码

// 创建Scene
    auto scene = HelloWorld::createScene();
 
    //通过Director运行Scene
    director->runWithScene(scene);

可以看到,我HelloWorldcreateScene()创建了一个Scene,具体createScene()方法是如何返回一Scene我们暂且不管,我们这里先来看看下面的一句代码,通过director对象调用runWithScene方法,该方法我们介绍Scene的时候都有讲到,介绍首次运行Scene时被用到的,这句代码执行之后,Scene就会被加载到游戏中做显示了。下面我们接着来看createScene(),进入HelloWorldScene.cpp查看createScene()方法的源码,可以看到:

Scene* HelloWorld::createScene()
{
    // 创建Scene
    auto scene = Scene::create();
   
    // 创建Layer对象
    auto layer = HelloWorld::create();
 
    // 把Layer添加到Scene里,Scene就是Layer的容器,可以添加很多Layer
    scene->addChild(layer);
 
    // 把Scene返回
    return scene;
}


的注大家应该能看懂。里可以看到先建了一个Scene象,Scene主要用来当做Layer的容器,然后建了一个Layer,并把Layer添加到了Scene上,当然Layercreate()函数候就会用到本身的Init()方法,在init方法中可以完成一些初始化的工作,例如添加一些sprite,例如去加一个Cocosstudio文件.csb。然后当我景运行起来的候被添加些游元素就能示出来了。

上面的讲解我们可以总结一下:Director使用来运行,跳Scene的,也就是说Director用来管理Scene,而Scene又是Layer的容器,创建的Layer只有添加到Scene上才能被最终显示出来,当然Scene可以同时添加很多Layer。Layer是作为显示的面板来使用的,可以添加Sprite,Label,Menu,Button,等等很多类型的游戏元素,通过这些游戏元素来展现我们的游戏,最终也就通过Director,Scene,Layer,Sprite这四个组件的组合创造出了缤纷多彩的游戏世界。

六,总结

本节课对 Director ,Scene,Layer,Sprite通过概念进行了初步的讲解,也为大家讲解了这四个游戏组件是如何的关系,以及如何组合来创造出游戏的。希望通过学习本节课程能让大家对这些组件有新的认识。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐