Sprite 组件可以是屏幕上显示的简单图片或者逐帧动画.
Sprite 组件使用 图集 或者 瓷砖图源 进行图像显示.
除了 Id, Position 和 Rotation 还有如下属性:
Image
. 否则, 每个槽都以材质中的纹理采样器命名.
每个槽是指该 sprite 用于纹理采样器的图集或者瓷砖图源资源.Automatic
则编辑器会自动为 sprite 设置尺寸. 如果设置为 Manual
则可以手动设置尺寸.GUIs 对于其元素的大小改变是积极的: 面板和对话框总是应该填满其容纳的区域. 但是在缩放节点时纹理可能会产生问题.
通常, 引擎把纹理整个填充到方块节点的边界, 但是九宫格纹理可以指定纹理里的那些内容需要缩放:
九宫格 方块节点包含4个像素数值分别代表左, 上, 右, 下有多少边缘不参与缩放:
从左边开始, 顺时针设置:
上述关于 九宫格 纹理缩放的描述仅在节点 size 改变时生效:
如果更改 sprite 或方块节点的缩放属性 (或者游戏对象自身的缩放属性) - sprite 或节点和纹理的缩放都不会带 Slice9 效果.
要在 Sprite 上启用九宫格 Sprite 图片的 Trim Mode 必须关闭.
因为渲染器里 mipmapping 的工作方式, 部分缩放纹理可能会造成小问题. 当你把纹理一部分 缩小 到比本身小的时候. 渲染器会自动选择一个低分辨率的 mipmap 来渲染这部分, 导致了这个小问题.
为避免这类问题, 使用小图导进来之后只放大别缩小就行了.
Blend Mode 属性定义了可视组件如何与其后面的图像混合. 以下列举了支持的混合模式及其混合算法:
src.a * src.rgb + (1 - src.a) * dst.rgb
src.rgb + dst.rgb
src.rgb * dst.rgb
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
hash
). 可以通过 go.set()
方法使用图集或者瓷砖图集资源来修改此属性. 请参考 这个例子的 API 文档.material
hash
). 可以通过 go.set()
方法使用材质资源来修改此属性. 请参考 这个例子的 API 文档.playback_rate
number
).scale
vector3
).size
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
vector4
). 四元数 x, y, z, 和 w 分别对应红, 绿, 蓝和不透明度.Sprite 可以覆盖当前分配材质中的顶点属性, 并将从组件传递到顶点着色器 (更多信息参见 材质教程).
材质中指定的属性将在检查器中显示为常规属性, 并且可以在单个 Sprite 组件上设置. 如果任何属性被覆盖, 它将显示为被覆盖的属性, 并存储在磁盘上的 sprite 文件中:
自定义属性自从 Defold 1.4.8 版本可用!
在 game.project 文件里有些关于Sprite的 设置项目.
当一个 sprite 使用多个纹理时有些问题需要注意.
动画数据 (fps, 帧名) 目前取自第一个纹理. 我们把它叫做 “驱动动画”.
驱动动画的图片 id 用来查找其他纹理所用图片. 所以确保纹理间的帧 id 匹配是很重要的.
比如你的 diffuse.atlas
有一个 run
动画如下:
run:
/main/images/hero_run_color_1.png
/main/images/hero_run_color_2.png
...
那么帧 id 就是 run/hero_run_color_1
这难以在比如 normal.atlas
里找到:
run:
/main/images/hero_run_normal_1.png
/main/images/hero_run_normal_2.png
...
所以我们在 图集 里使用 Rename patterns
来重命名它们.
在相应图集里设置 _color=
和 _normal=
, 然后你就能在两个图集里得到这样的帧名:
run/hero_run_1
run/hero_run_2
...
UVs 取自第一个纹理. 因为只有一套顶点, 我们不能保证 如果第二个纹理有更多 UV 坐标或者有不同形状都能匹配得当.
所以要记住, 确保图片有足够相似的形状, 否则您可能会遇到纹理渗色.
每个纹理中图像的尺寸可以不同.
Did you spot an error or do you have a suggestion? Please let us know on GitHub!
GITHUB