Read this manual in English

Sprites

Sprite 组件可以是屏幕上显示的简单图片或者逐帧动画.

sprite

Sprite 组件使用 图集 或者 瓷砖图源 进行图像显示.

Sprite 属性

除了 Id, PositionRotation 还有如下属性:

Image
sprite所使用的图集或者瓷砖图源资源.
DefaultAnimation
sprite的默认动画.
Material
sprite的渲染材质.
Blend Mode
组件渲染时使用的混合模式.
Size Mode
如果设置为 Automatic 则编辑器会自动为 sprite 设置尺寸. 如果设置为 Manual 则可以手动设置尺寸.
Slice 9
设置在更改 sprite 大小时, 保留其周围边缘纹理的像素大小.

九宫格纹理

GUIs 对于其元素的大小改变是积极的: 面板和对话框总是应该填满其容纳的区域. 但是在缩放节点时纹理可能会产生问题.

通常, 引擎把纹理整个填充到方块节点的边界, 但是九宫格纹理可以指定纹理里的那些内容需要缩放:

GUI 缩放

九宫格方块节点包含4个像素数值分别代表左, 上, 右, 下有多少边缘不参与缩放:

九宫格属性

从左边开始, 顺时针设置:

九宫格设置

  • 角落部分不会被缩放.
  • 边缘部分延单轴缩放. 左右边缘竖直缩放. 上下边缘水平缩放.
  • 中央部分正常延两个轴缩放.

上述关于 九宫格 纹理缩放的描述仅在节点 size 改变时生效:

GUI box node size

Sprite size

如果更改 sprite 或方块节点的缩放属性 (或者游戏对象自身的缩放属性) - sprite 或节点和纹理的缩放都不会带 Slice9 效果.

Mipmaps 和 slice-9

因为渲染器里 mipmapping 的工作方式, 部分缩放纹理可能会造成小问题. 当你把纹理一部分 缩小 到比本身小的时候. 渲染器会自动选择一个低分辨率的 mipmap 来渲染这部分, 导致了这个小问题.

Slice 9 mipmapping

为避免这类问题, 使用小图导进来之后只放大别缩小就行了.

混合模式

Blend Mode 属性定义了可视组件如何与其后面的图像混合. 以下列举了支持的混合模式及其混合算法:

Alpha
普通混合: src.a * src.rgb + (1 - src.a) * dst.rgb
Add
使用相应组件的像素颜色值提亮背景: src.rgb + dst.rgb
Multiply
使用相应组件的像素颜色值调暗背景: src.rgb * dst.rgb
Screen
Multiply 的反向操作. 使用相应组件的像素颜色值提亮背景: src.rgb - dst.rgb * dst.rgb

运行时操作

运行时可以使用各种各样的函数和属性 (参见 API 文档)来控制Sprite. 函数:

  • sprite.play_flipbook() - 在sprite组件上播放动画.
  • sprite.set_hflip()sprite.set_vflip() - 翻转Sprite动画.

还可以使用 go.get()go.set() 来控制Sprite:

cursor
初始化动画播放头 (number).
image
sprite图 (hash). 可以通过 go.set() 方法使用图集或者瓷砖图集资源来修改此属性. 请参考 这个例子的 API 文档.
material
sprite材质 (hash). 可以通过 go.set() 方法使用材质资源来修改此属性. 请参考 这个例子的 API 文档.
playback_rate
动画播放速率 (number).
scale
Sprite缩放 (vector3).
size
Sprite大小 (vector3). 只有 sprite 的 size-mode 设置为 manual 时可以更改.

材质常量

默认 sprite 材质常量可以使用 go.set()go.animate() 来修改 (参考 材质教程). 例如:

go.set("#sprite", "tint", vmath.vector4(1,0,0,1))
go.animate("#sprite", "tint", go.PLAYBACK_LOOP_PINGPONG, vmath.vector4(1,0,0,1), go.EASING_LINEAR, 2)
tint
3D网格颜色 (vector4). 四元数 x, y, z, 和 w 分别对应红, 绿, 蓝和不透明度.

相关项目配置

game.project 文件里有些关于Sprite的 设置项目.