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节点有两个重要的属性:positionanchorPoint

    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轴向下为正。在androidios等平台使用的视图、控件等都是遵循这个坐标系。而在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 核心概念的主要内容,如果未能解决你的问题,请参考以下文章

Lua 笔记

15分钟掌握Elasticsearch 8大核心概念与基础用法

Spring Security系列之核心概念

WebRTC 源码分析之一:几个核心设计概念

前端技术丨主题周Angular 核心概念与框架演进

Webpack核心概念