1.Cocos2d-x Lua 核心概念
Posted 肖洒的分享
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1.Cocos2d-x Lua 核心概念相关的知识,希望对你有一定的参考价值。
注:本文使用版本为Cocos2d-x3.2版本。
Cocos2d-x Lua 中有很多概念,很多来源于动画,动漫,电影等行业,例如导演、场景和层等概念,当然也有传统游戏的概念。核心概念如下:
·导演.--导演类Director用于管理场景对象,采用单例设计模式,在整个工程中只有一个实例对象。由于是单例模式,能够保存一致的配置信息,便于管理场景对象。
获取导演类Director实例语句如下:
local director==cc.Director:getInstance();
-- Lua 中默认变量是全局的,所以非必要要设置为局部的,关键词 local;
-- cc 是Cocos2d-x Lua中类的命名空间,Director是导演类,getInstance()
函数是获得调用实例。
导演对象职责如下:
·访问和改变场景。
·访问配置信息。
·暂停、继续和停止游戏。
·转换坐标。
·场景.--场景类Scene是构成游戏的界面,类似于电影场景,大致分三类。
· 展示类场景。--播放视频或简单的在图像上输出文字,用来实现游戏的开场
介绍,胜利和失败提示,帮助介绍。
· 选项类场景。--主菜单、设置游戏参数等。
· 游戏场景。--游戏的主要内容。
·层.--Layer类似于PS的图层,一层一层叠在一起,游戏的很多内容都是在层上实现的。 两个层如果有交叉的部分,后创建的层会覆盖前面的层。
·精灵.--Sprite精灵类包括了敌人,控制对象,静态物体和背景等,通常情况它会进行运动,运动方式包括移动,旋转,放大,缩小,变色等。
·菜单.--菜单类Meau,提供操作的集合。菜单类包含MenuItem,MenuItem有很多形式的子类,比如MenuItemLabel(文本),MenuItemSprite(精灵),MenuItemToggle(开关)。每个菜单项有三个基本状态:正常,选中,禁止。
·节点.--Node 采用层级(树状)结构来管理场景,层,精灵,菜单,文本,地图和粒子系统等节点对象。一个场景包含了多个层,一个层又包含多个精灵、菜单、文本等对象。层级结构中的节点可以是场景,层,精灵,文本等任何对象。--这些节点有个共同的父类 Node,Node类是最为重要的根类,它是场景,层,精灵等类的根类。
Node 作为根类,有很多重要的函数
local childNode=cc.Node:create()--创建节点
node:addChild(childNode,0,123)--增加新的子节点,第二个参数是层级,第三个是标签。
local node=node:getChildByTag(123)--通过标签获取子节点node:removeChildByTag(123,true)--通过标签删除子节点并停止该节点一切动作。
node:removeChild(childNode,true)--删除子节点并停止该节点一切动作
node:removeAllChildrenWithCleanup(true)--删除node节点所有的子节点并停止这些节点一切动作。
node:removeFromParentAndCleanup(true)--从父节点删除node节点,并停止该节点一切动作。
Node 中的重要的属性
Node节点有两个重要的属性:position和anchorPoint
position属性是Node对象的实际位置,position属性往往需要配合anchorPoint
属性,为了将一个Node对象精准的放置在屏幕某个位置,需要设置该矩形的
锚点,anchorPoint是position的参考点(默认为(0.5,0.5)中心点)。
anchorPoint为(0.5,0.5) 为物体的中心点
anchorPoint为(0.0,0.0) 为物体的左下角
anchorPoint为(0.0,1.0) 为物体的左上点
anchorPoint为(1.0,1.0) 为物体的右上角
anchorPoint为(1.0,0.0) 为物体的右下角
-- label:setAnchorPoint(cc.p(1.0,1.0)) 将物体的锚点设置为右上角
Node中的定时器 --游戏循环与调度,游戏程序都有一个循环不断运行,由导
演对象来管理和维护的,如果需要场景中的精灵运动起来,可以在游戏循环
中使用定时器(Scheduler)对精灵等对象的运行进行调度。因为Node类分装了
Scheduler类,所以也可以直接使用Node 中的定时器相关函数。
Node中的定时器相关函数如下:·scheduleUpdateWithPriorityLua(nHandler,priority)--每个Node对象只要调用该函数,那么整个 Node 对象就会定时地每帧回调一次nHandler函数。priority是优先级,priority 值越小越优先执行。
·unscheduleUpdate()--停止 scheduleUpdateWithPriorityLua 的调度
·坐标系.--Cocos2d-x Lua坐标系的原点在左下角,坐标的类型又分为世界坐标和模型坐标。
UI坐标
UI坐标原点在左上角,x轴向右为正,y轴向下为正。在android和ios等平台使用的视图、控件等都是遵循这个坐标系。而在Cocos2d-x Lua默认不采用UI坐标的情况下,有时候也会用到UI坐标,例如在触摸事件发生的时候会获得一个触摸对象(Touch),触摸对象提供了很多获得位置信息的函数,如下代码所示。
cc.p.touchLocation=touch:getLocationInview()
使用 getLocationInview() 函数获得触摸点坐标事实上就是UI坐标,它的坐标原点在左上角,而不是Cocos2d-x Lua 默认坐标,可以采用下面语句转换:
cc.p.touchLocation2=cc.Director:getInstance():convertToGL(touchLocation)
这样就可以将触摸点位置从UI坐标转换为OpenGL坐标,Cocos2d-x Lua 底层采用 OpenGL 渲染,因此 OpenGL 坐标就是 Cocos2d-x Lua 默认坐标。
·世界坐标和模型坐标.--世界坐标:物体显示的坐标,模型坐标:以模型为参照点(原点)的坐标。
·convertToNodeSpace(worldPoint):--将世界坐标转换为模型坐标。
·convertToNodeSpaceAR(worldPoint):--将世界坐标转换为模型坐标,AR表示相对于锚点。
·convertTouchToNodeSpace(touch):--将世界坐标中触摸点转换为模型坐标。·convertTouchToNodeSpaceAR(touch):--将世界坐标中的触摸点转换为模型坐标,AR表示相对于锚点。
·convertToWorldSpace(nodePoint):--将模型坐标转换为世界坐标。
·convertToWorldSpaceAR(nodePoint):--将模型坐标转换为世界坐标,AR表示相对于锚点。
谢谢观看~!
以上是关于1.Cocos2d-x Lua 核心概念的主要内容,如果未能解决你的问题,请参考以下文章