导演
导演类 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
精灵总绑定一个纹理对象或精灵帧对象。引擎渲染精灵实际上是把精灵绑定的纹理或精灵帧按照属性设定渲染到屏幕上。
- 绑定对象
- 纹理Texture2D
- 精灵帧SpriteFrame
- 绑定对象与精灵之间的关系
- Image对应硬盘中不同类型的图片,如jpg和png等。它知道如何从文件中读取不同类型的图片,生成缓存数据,供纹理Texture2D使用。
- Texture2D代表一个可以绘制的纹理
- SpriteFrame的概念是相对于动画产生。个Sprite可以拥有多个SpriteFrame,一个时刻只显示其中一帧。帧之间切换就形成了动画。SpriteFrame是具有一定区域的属性的纹理。依赖于Texture2D。
- Animation描述的是一个有序的SpriteFrame系列,类似于剪辑过的胶卷。
- Animate可以把Animation转化为引擎识别的Action类,让Sprite可以运行
- 创建
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")

按钮
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,序列帧动画(逐帧动画)
- MoveTo与MoveBy,用于使节点从当前坐标点匀速运动到目标点。
高级动作
- 复合动作
- 变速动作
序列帧动画(跳过)
调度器
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对象进入和退出场景时触发。例如加入一个层或者其他子类的时候,想在子类进入活着退出的时候添加一些数据的清除工作。
帧事件
键盘事件
加速计事件
触摸事件
- 单点触摸
-- 触摸事件:单点触摸
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等状态变化。
- 多点触摸
网友评论