您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息
免费发信息
三六零分类信息网 > 河池分类信息网,免费分类信息发布

Cocos2d-x学习笔记(5)

2024/3/16 17:55:26发布24次查看
cocos2d-x基本元素介绍: 1、ccdirector:大总管 这是控制游戏流程的主要组件,包括设定游戏呈现窗口、fps显示、默认帧率上限、纹理颜色位宽等切换当前游戏场景、暂停或恢复场景运行。通过ccdirector* pdirector = ccdirector::shareddirector();访问场
        cocos2d-x基本元素介绍:
        1、ccdirector:大总管
        这是控制游戏流程的主要组件,包括设定游戏呈现窗口、fps显示、默认帧率上限、纹理颜色位宽等切换当前游戏场景、暂停或恢复场景运行。通过ccdirector* pdirector = ccdirector::shareddirector();访问场景。
        (1)runwithscene(ccscene* scene):启动游戏,并运行scene场景,这个方法主要用在主程序启动时第一次启动主场景时调用。
        (2)replacescene(ccscene* scene):直接使用传入的scene替换当前场景来切换画面,当前场景被释放。
        (3)pushscene(ccscene *scene):将当前运行的scene暂停并压入到代执行场景栈中,再将传入的scene设置为当前运行场景。
        (4)popscene:释放当前场景,再从代执行场景栈中弹出栈顶的场景,并将其设置为当前运行场景,如果栈为空,直接结束应用。
        (5)pause:暂停当前运行场景中所有计时器和动作,场景仍然会在屏幕上。
        (6)resume:恢复当前运行场景中被暂停的计时器和动作,与pause配合使用。
        (7)end:结束场景,同时退出应用。
        2、ccscene:场景
        场景并没有特别功能,作为层的容器,流程控制。
        3、cclayer:层
void addchild(ccnode* child);void addchild(ccnode* child,int zorder);void addchild(ccnode* child,int zorder,int tag);
child就是添加的节点,对于场景来说,节点就是层,如果想要指定先后顺序,可以使用不同的zorder值,zorder代表了该节点下元素的先后顺序,值越大显示顺序越靠上,其默认值为0。tag是元素的标识代码,如果子节点设置了tag值,则就可以在父节点中利用tag值找到它。cclayer一个十分重要的内容就是可以接受用户输入事件,包括触摸、加速度计、键盘输入等。        4、ccsprite:精灵,继承自ccnode
        (1)纹理:纹理就是一张图片,这张图片被精灵显示出来。cocos2d-x使用了3d绘图库opengl。
        (2)创建精灵:精灵是由纹理创建的,首先在层的初始化方法中创建精灵,设置属性,添加到层。有多种方式可以创建精灵。我们使用工厂方法创建精灵:
                ccsprite* fish = ccsprite::create(”fish.png“);//fish.png是精灵所用纹理的文件名。精灵不但可以显示一个完整的纹理,也可以显示一部分,如下:
                ccsprite* smallfish = ccsprite::create(”fish.png“,ccrectmake(0,0,100,100));//这行代码显示纹理左上角100*100像素大小的部分。
        (3)设置精灵属性:精灵位置、方向、缩放比等参数都是精灵的属性。首先获取屏幕大小的代码入下:
ccsize size = ccdirector::shareddirector()->getwinsize();//获取屏幕大小ccpoint pos = cpp(size.width / 2,size.height / 2);//确定精灵位置fish->setposition(pos);//设置精灵位置
(4)向层中添加精灵        设置完精灵属性后,把精灵添加到层中,实际上ccsprite和cclayer都继承自ccnode,向一个元素中添加其他游戏元素的addchild是ccnode包含的一个方法,因此,也可以使用addchild将精灵添加到层:this->addchild(fish);
        (5)常用成员
        一、初始化方法:
            a、使用图片文件           
static ccsprite* create(const char *pszfilename);static ccsprite* create(const char *pszfilename,const ccrect& rect);bool initwithfile(const char *pszfilename);bool initwithfile(const char *pszfilename,const ccrect& rect);
rect为可选选项,用于指定精灵显示纹理的部分,使用之前类似于cpp的坐标系            b、使用cctexture2d(贴图类)
static ccsprite* create(cctexture2d *ptexture);static ccsprite* create(cctexture2d *ptexture,const ccrect& rect);bool initwithtexture(cctexture2d *ptexture);bool initwithtexture(cctexture2d *ptexture,const ccrect& rect);
cctexture2d类型的ptexture参数为纹理对象,可以使用cctexturecache类的addimage方法把图片文件装载为纹理并返回,rect与之前功能一样。
            c、使用ccspriteframe创建,创建方法如下:static ccsprite* create(ccspriteframe *pspriteframe);bool initwithspriteframe(ccspriteframe *pspriteframe);
pspriteframe参数为纹理框帧,它保存一个cctexture2d的应用与一个ccrect来表示纹理的一部分。        二、纹理相关属性
        cctexture2d* texture:获取或设置精灵所用的纹理,使用此法设置纹理后,精灵将会显示一个完整的纹理。
        ccrect texturerect:获取或设置纹理显示部分,此ccrect采用纹理坐标,即左上角为原点。
        ccspritebatchnode* batchnode:获取或设置精灵所属的批节点。
        三、纹理相关的方法
        void setdisplayframe(ccspriteframe *pnewframe):设置显示中的纹理框帧,其中pnewframe为新的纹理框帧,其代表的纹理或纹理显示部分,可以与旧框帧不同
        ccspriteframe* displayframe:获取正在显示的纹理框帧。
        bool isframedisplayed(ccspriteframe *pframe):返回一个值,表示pframe是不是正在显示中的纹理框帧。
        四、颜色相关的属性
        cccolor3 color:获取或设置叠加在精灵上的颜色,cccolor3由3个颜色分量(红、绿、蓝)组成,默认为纯白色,表示不改变精灵的颜色,如果设置为其他值,会改变。
        glubyte opacity:获取或设置精灵的不透明度,glubyte为opengl的内置类型,表示一个无符号8位整数,取值范围0~255
        bool opacitymodifyrgb:获取或设置精灵所使用的的纹理数据是否已经预乘alpha通道,包含aloha通道的图片显示错误时,可以修改这个属性。
        5、ccnode与坐标系
        cocos2d-x采用场景、层、精灵的层次结构来组织游戏元素,这个层次结构还对应了游戏的渲染层次,因此游戏元素可以组织成树形结构,成为渲染树。cocos2d-x把渲染树上的每一个游戏元素抽象为一个节点,即ccnode,一切游戏元素都继承自ccnode,具有ccnode的所有特性。
        ccnode定义了一个可以绘制对象的通用特性,包括位置、缩放、是否可见、旋转角度等。
       (1)cocos2d-x中坐标系:存在两种坐标系
                a、绘图坐标系:采用与opengl相同的坐标系,左下角为原点,向右为x轴正方向,向上为y轴正方向,在cococs2d-x中,一切绘图相关的操作都使用绘图坐标系,如position和anchorpoint等属性。
                b、纹理坐标系:以左上角为原点,向右为x轴正方向,向下为y轴正方向,如:ccsprite的texturerect属性。
        (2)绘图属性:
                a、ccsize contentsize:获取或设置此节点的内容大小,以便进行图形变换。
                b、ccpoint anchorpoint与ccpoint position:anchorpoint用于设置一个锚点,以便更精确的控制节点的位置和变换。anchorpoint的两个参数x和y的取值在0到1之间的实数,表示锚点相对于节点长宽的位置。position用于设置节点的位置,由于position指的是锚点在父节点中的坐标值,节点显示的位置通常与锚点有关。
                c、folat rotation:获取或设置节点的旋转角度,节点以自己的锚点为中心顺时针旋转一定量,单位是角度,旋转角度可以是任意的。
                d、float scale(float scalex和float scaley):scale用于获取或设置及诶单的缩放比例,节点以锚点为中心缩放该比例。scale代表整体缩放比例,而scalex与scaley表示x与y方向的缩放比例。默认情况下三种都是1。
                e、bool visible:获取或设置节点的可见性。当visible为true时,节点显示。其访问器特殊:
                bool isvisible();//类似于get访问器
                void setvisible(bool visible);//类似于set访问器
                 f、float skewx与float skewy:获取或设置斜切角度。节点以锚点为中心,平行x轴或y轴方向做一定角度的变形。skewx为平行x轴顺时针的变形,skewy为平行y轴逆时针的变形,单位为角度。默认为0.
                g、int tag:获取或设置节点的标号,快速从节点的所有节点中找出所需节点,定位子节点,tag不可相同。相关方法有:getchildbytag、removechildbytag等
                h、void userdata:获取或设置与节点相关的额外信息。利用void*属性保存任何数据。
   其它属性:ccarray* children、ccnode* parent、cccamera* camera、ccgridbase* grid、ccglprogram* shaderprogram、ccactionmanager* actionmanager、ccscheduler* scheduler等以后再介绍。
        6、节点的组织:
组织节点相关的方法方法 描述
addchild(ccnode* child) 把child添加到当前节点之中
removefromparentandcleanup(bool cleanup) 把当前节点从其父节点移除,如果cleanup为true,则执行clean方法
removechild(ccnode* child,bool cleanup) 从当前节点中移除child节点,如果cleanup为true,则调用child的clean方法
removechildbytag(int tag,bool cleanup) 从当前节点中移除标号为tag的节点
removeallchildwithcleanup(bool cleanup) 移除当前节点的所有子节点
getchildbytag(int tag) 返回当前节点中标号为tag的节点
cleanup 停止此节点的全部动作与计时器
7、定时器事件:定时器是一定时间间隔连续引发游戏时间的工具,定时器是游戏动态变化的工具。        (1)update定时器:机制是ccnode的刷新事件update方法,该方法在每帧绘制之前都会被触发一次。ccnode默认并没有启用update事件,需要调用scheduleupdate方法,并重载update以执行自己的代码。使用unscheduleuptage方法停止定时器。
        (2)schedule定时器:机制是ccnode提供的schedule方法,可以实现一定时间间隔连续调用某个函数,时间间隔必须大于2帧的间隔。
        8、其他事件:cocos2d-x还为我们提供了一些其他与流程控制相关的事件。
        (1)onenter:当此节点所在的场景即将呈现时,会调用此方法
        (2)onentertransitiondidfinish():当此节点所在场景的入场动作结束后,会调用此方法,如果所在场景没有入场动作,则此方法会紧接着onenter()后被调用
        (3)onexit():当此节点所在场景即将退出时,会调用此方法
        (4)onexittransitiondidstart():当此节点所在场景的出场动作结束后,会调用此方法,如果所在场景没有出场动作,则此方法会紧接着onexit()后被调用。
河池分类信息网,免费分类信息发布

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录