美文网首页
cocos-Lua基础概念

cocos-Lua基础概念

作者: 无用书生繁华梦 | 来源:发表于2020-02-18 22:43 被阅读0次

导演

导演类 cc.Director

local director = cc.Director:getInstance()

节点

节点类 cc.Node

local node = display.newNode()

场景

场景类 cc.Scene

1、创建普通场景

local scene = display.newScene("name")

2、创建带物理引擎的场景

local scene = display.newPhysicsScene("name")

层类 cc.Layer

local layer = display.newLayer();     --普通层
local layer = display.newColorLayer(cc.c4b(255,0,0,255));       --带颜色的层

精灵(图像的载体)

精灵类 cc.Sprite

精灵总绑定一个纹理对象或精灵帧对象。引擎渲染精灵实际上是把精灵绑定的纹理或精灵帧按照属性设定渲染到屏幕上。

  1. 绑定对象
    • 纹理Texture2D
    • 精灵帧SpriteFrame
  2. 绑定对象与精灵之间的关系
    • Image对应硬盘中不同类型的图片,如jpg和png等。它知道如何从文件中读取不同类型的图片,生成缓存数据,供纹理Texture2D使用。
    • Texture2D代表一个可以绘制的纹理
    • SpriteFrame的概念是相对于动画产生。个Sprite可以拥有多个SpriteFrame,一个时刻只显示其中一帧。帧之间切换就形成了动画。SpriteFrame是具有一定区域的属性的纹理。依赖于Texture2D。
    • Animation描述的是一个有序的SpriteFrame系列,类似于剪辑过的胶卷。
    • Animate可以把Animation转化为引擎识别的Action类,让Sprite可以运行
  3. 创建
local sprite =display.newSprite("hello.png") --从图片创建
local sprite =display.newSprite("#hello.png") --从缓存中创建精灵

local frame = display.newFrame("hello.png")
local sprite = display.newSprite(frame)     --从spriteFreamd对象创建精灵

坐标系

屏幕坐标系

笛卡尔坐标系,右手坐标系。大拇指指向x轴,食指指向y轴,中指指向z轴

Cocos-Lua坐标系

坐标系原点是左下角

世界坐标系

Cocos-Lua坐标系别称

本地坐标系

相对于父容器的坐标

锚点

  • Layer的锚点默认的是(0,0)
  • Sprite的锚点默认的是(0,5,0,5)

如果设置了忽略锚点IgnoreAnchorPointForPosition(true),则设置锚点不生效。默认这个值是false。

ZOrder与渲染顺序

z轴值最小的Node最先被渲染

LocalZOrder

LocalZOrder是一个父节点的兄弟节点之间的排序key值,决定他们在SceneGraph渲染树上的顺序
如果值相同,先加入的节点先渲染。

GlobalZOrder(通常情况不建议使用)

GlobalZOrder是绕过渲染书直接提升渲染等级的一个入口。初始化值为0,且遵循渲染树渲染。如果值不为0,且相等,那么渲染顺序不可预期

文本标签

TTF文本标签

TTF文本创建后,如果修改文本内容,则会重新创建一个新的OpenGL纹理,跟重新创建一个新的TTF文本一样。意味着刷新效率不高。印象中,一个文本一个DrawCall。做优化的时候其实一般把需要经常变化更新的场景,使用BMFont。或者直接使用美术字。

    -- display 中的文本标签
    local ttfLabelSys = display.newTTFLabel({
        text = "display.newTTFLabel sys TTF",
        font = "",
        size = 30,
        align = cc.TEXT_ALIGNMENT_CENTER,
        x = display.cx,
        y = display.cy + 400
    })
    self:addChild(ttfLabelSys)

    local ttfLabelSrc = display.newTTFLabel({
        text = "display.newTTFLabel font in src",
        font = "CreteRound-Italic.ttf",
        size = 30,
        align = cc.TEXT_ALIGNMENT_CENTER,
        x = display.cx,
        y = display.cy + 350
    })
    self:addChild(ttfLabelSrc)

BMFont文本标签

制作成功的 BMFont文本包含两个文件:

  • 图片文件(.png)
  • 字体坐标文件(.fnt),包含了对应图片的名字(图片包含了所有要绘制的字符)、图片中的字符对应的Unicode编码、字符所在图片的坐标,宽、高等信息。

制作方法另外文章单独写

图集文本标签

图集文本标签是由一连串的等宽图片拼接成的一张整图,这些图片中的符号的ASCII码是连续的。
cc中的图集文本标签创建函数cc.Label:createWithCharMap(图集图片路径, 一个字符图片的宽, 一个字符图片的高, 图集的第一个字符的ASCII码)

    local labelCM = cc.Label:createWithCharMap("number.png", 19, 35, string.byte(0))
        :addTo(self)
        :pos(display.cx, display.cy + 50)
    labelCM:setString("9876543210")
number.png

按钮

ccui.Button

ccui.CheckBox

场景转换

动作Action类

基础动作

  • 瞬时动作
    • Place 该动作用于将节点放置到某个指定位置,作用与setPosition相同。但是这里他是一个动作
    • FlipX与FlipY,它们分别将Sprite沿X轴或Y轴反转显示。和setFlippedX或setFlippedY相同。也是一个动作
    • Show 与 Hide,用于显示和隐藏节点,和setVisible相同
    • RemoveSelf,该动作执行的时候把自己从父节点移除
    • CallFunc,再复合动作中,判断某个动作是否执行结束,然后在启动其他逻辑
  • 有限时间动作,和瞬时动作不同,至少需要一个游戏帧完成。下面的to和by的区别,to是最终量,by是相对量。
    • MoveTo与MoveBy,用于使节点从当前坐标点匀速运动到目标点。
      • 参数1:运动总时间
      • 参数2:moveTo是目标终点,moveBy是相对偏移量。
    • JumpTo与JumpBy,使节点以一定的轨迹匀速跳跃到指定的位置。
    • BezierTo与BezierBy,使节点沿贝塞尔曲线运动。每条贝塞尔曲线都有一个起点,终点和控制点。
    • ScaleTo与ScaleBy,使节点的缩放系数随时间线性变化
    • RotateTo与RotateBy,使节点围绕锚点旋转
    • FadeIn,FadeOut,FadeTo,淡入,淡出,指定变化透明度(0~250)
    • TintTo与TintBy,使节点着色
    • Blink,使节点闪烁,内部是设置节点透明度0或250来实现闪烁效果。两个参数(持续时间,闪烁次数)
    • Animation,序列帧动画(逐帧动画)

高级动作

  • 复合动作
  • 变速动作

序列帧动画(跳过)

调度器

1.全局调度器

全局帧调度器

全局帧调度器是游戏的每一帧都会触发的调度器,主要用于在碰撞检测等每一帧都需要计算的地方。

    local scheduler = require(cc.PACKAGE_NAME .. ".scheduler")
        -- 全局帧调度器
    local function onInterval(dt)
        print("update",dt)
    end
    scheduler.scheduleUpdateGlobal(onInterval)

全局自定义调度器

自定义调度器可以指定时间,提供更高的灵活性。由于引擎的机制,自定义时间间隔必须大于两帧的间隔,否则两帧内多次调用会合并成一次。所以自定义时间间隔应该在1/60s以上。

    -- 全局自定义调度器
    local function onInterval(dt)
        print("Custom")
    end
    scheduler.scheduleGlobal(onInterval, 0.5)

全局延时调度器

若在游戏的某些场合,指向实现一个单次的延迟调用,就需要延迟调度器。

-- 全局延时调度器
    local function onInterval(dt)
        print("once")
    end
    scheduler.performWithDelayGlobal(onInterval, 0.5)

2.节点调度器

  • 节点帧调度器
  • 节点自定义调度器
  • 节点延迟调度器

事件分发机制

节点事件

节点事件在一个Node对象进入和退出场景时触发。例如加入一个层或者其他子类的时候,想在子类进入活着退出的时候添加一些数据的清除工作。

帧事件

键盘事件

加速计事件

触摸事件

  1. 单点触摸
        -- 触摸事件:单点触摸
        local node = display.newSprite("HelloWorld.png")
        self:addChild(node)
        node:center()
        node:addNodeEventListener(cc.NODE_TOUCH_EVENT, function(event)
            printf("Sprite:%s | x = %0.2f | y = %0.2f",event.name,event.x,event.y)
            -- if event.name == "began" then
            --     return true
            -- end
        end)
        node:setTouchEnabled(true)

如果在began状态时候,事件处理函数不返回ture,就不会接受到后面的moved,ended等状态变化。

  1. 多点触摸

相关文章

  • cocos-Lua基础概念

    导演 导演类 cc.Director 节点 节点类 cc.Node 场景 场景类 cc.Scene 1、创建...

  • Golang Gist

    概念讲解 基础概念 基础问答 基础问答 编码能力考查x

  • cocos2d-lua 简单状态机 机制

    以前讲过cocos-lua的状态机组件 传送门1: http://www.jianshu.com/p/cd5821...

  • 基础概念

    Ecmascript 是一个脚本语言标准,规定这个语言的语法,内置函数等等 Javascript是Ecmascri...

  • 基础概念

    集合竞价视频 做市做市商 交易时间 第一次集合竞价时间:9:15-9:25; 做市商做市前报价时间:9:25-9:...

  • 基础概念

    一:统计学和机器学习的比较和练习: 二: from:https://ai.baidu.com/paddlepadd...

  • 基础概念

    净流动资产值 格雷厄姆的主要选股规则, 是买入市值低于净流动资产值 2/3 的企业,待股价超过净资产以上某比例后卖...

  • 基础概念

    1.基本概念 Java是纯面向对象语言,“Everything is Object”;所有代码(包括函数、变量等)...

  • 基础概念

    参考教程,廖雪峰 数据类型 Number js不区分整数合浮点数,统一使用Number。NaN:表示Not a N...

  • 基础概念

    关键 标识符 所谓标识符是指变量、函数、属性的名字,或者函数的参数。标识符的书写有几个特征 区分大小写 第一个字符...

网友评论

      本文标题:cocos-Lua基础概念

      本文链接:https://www.haomeiwen.com/subject/jqunfhtx.html