<script src="/files/spine-player/4.3/spine-player.js"></script>
<link rel="stylesheet" href="/files/spine-player/4.3/spine-player.css">
<div class="units-row-end">		
	<div class="unit-100">
		<div class="examples-header">
			<div class="units-row">
				<div class="unit-60">
					<div id="player"></div>
				</div>
				<div class="unit-40">
					<div class="examples-header-info">
						<div class="examples-header-info-tags">
							<span>标签:</span>
							<p>专业版, 网格, 权重, 更新绑定, 滑块</p>
						</div>
						<div class="examples-header-download">[example-download:diamond]</div>
					</div>
				</div>
			</div>
		</div>
	</div>
</div>
<script>
new spine.SpinePlayer(document.getElementById("player"), {
	skeleton: "/files/examples/4.3/diamond/export/diamond-pro.json",
	atlas: "/files/examples/4.3/diamond/export/diamond-pma.atlas",
	viewport: { 
		x: -150,
		y: 0,
		width: 300,
		height: 350,
	},
	animation: "idle-rotating",
	backgroundColor: "#555555FF",
	fullScreenBackgroundColor: "#555555FF"
});
</script>

!!
# 钻石

钻石项目展示了如何使用 Spine 专业版创建高级的伪 3D 效果. 该项目说明了如何使用滑块控制钻石的旋转.

## 设置

本项目基于 [这篇博客文章](blog/Rotating-diamond-tutorial) 中展示的步骤构建, 最终得到以下动画:

<img style="max-width:100%" class="no-borders" src="/img/blog/diamond-tutorial/diamond-sizes--small.gif">!!

相较于博客版本, 移除了全部绘制顺序关键帧(keys). 同时将钻石侧面的所有图像附件的 alpha 值设为 `176`, 使其呈现半透明效果.

<img style="max-width:100%" class="no-borders" src="/img/spine-examples/diamond/diamond-transparency.png">!!


## 高光效果

本项目中有两种高光效果: 一种是普通辉光(glow)，分为两个槽位: `upper-side-gradient` 和 `upper-side-gradient2`; 另一种是钻石各侧面的高光(shine) [序列](/spine-regions#Sequence).

这些动画大多数都放在 `rotation` 动画中, 下文中会详细说明.

普通辉光只是在动画模式下切换颜色(tint)的同时使用 [淡入淡出](/spine-keys#插槽颜色) 功能.

<img style="max-width:100%" class="no-borders" src="/img/spine-examples/diamond/sequence-disk.png"><br>!!

出现在各个侧面的高光效果与钻石侧面图像的尺寸完全一致. 因此你可以复制各个侧面的网格, 并将图像路径替换为第一套网格的高光图片.

该序列从帧 `0` 到 `6`，其其中第一张和最后一张图像均为空白，因此无需在动画中持续添加或移除 [槽位附件关键帧](/spine-keys#插槽附件).

![](/img/spine-examples/diamond/sequence-properties.png)

然后在动画模式中使用 `Once reverse` 设置为这些序列添加关键帧, 使其从最后一帧播放到第一帧，以匹配钻石的旋转. 考虑到普通辉光、顶部高光、上侧面高光和下侧面高光中同时可能有5-6个高光效果同时生效, 因此只激活面向镜头(正面)的高光效果，以便控制动画元素的数量.

![](/img/spine-examples/diamond/sequence-keys.png)

包含高光效果的槽位的 [blending](/spine-slots#混合) 模式设置为 additive. 随后在动画模式下对颜色进行动画化来创建彩虹色闪烁效果. 首先所有选中所有高光, 将槽位颜色动画化为彩虹色. 再对这些关键帧进行 [偏移](/spine-keys#偏移) 为各侧面创建变体效果, 因为多个高光效果可能同时可见.

![](/img/spine-examples/diamond/color-keys.png)

## 滑块

[滑块](/spine-sliders) 的 `rotation` 包含钻石的旋转动画.
首先, 创建 `rotation` 动画并添加关键帧以控制钻石旋转. 该动画的关键帧从 `0` 到 `60`，因此在此区间内钻石完成一周旋转，正如 [博客](/blog/Rotating-diamond-tutorial#透视旋转)中所述. 唯一的区别是，从 Spine 4 及以上版本开始，只需在本地坐标系中设置两个关键帧(分别为 `0` 和 `+360`)即可实现完整旋转.

然后在设置模式下选中该动画, 并创建新的滑块.

![](/img/spine-examples/diamond/slider-properties.png)

创建骨骼 `diamond-rotation-control` 是为了通过其旋转来控制滑块. 通过滑块属性的骨骼字段将其分配给滑块后，`rotate`(范围从 `0` 到 `360`)将控制滑块动画的播放进度, 映射自帧 `0` 到 `60`(即整个动画长度.
`local` 设置确保即使钻石在某些动画中旋转, 控制仍能按预期工作. `loop` 允许骨骼旋转超过 360° 或变为负值, 这代表从头开始重播动画.

![](/img/spine-examples/diamond/diamond-rotating-bone-.gif)

## 动画

骨骼 `diamond-rotation-control` 用于控制钻石旋转, 而无需手动重建或调整各种相关效果的时点. 因此用很少的 keys 就能创建许多变体.

<img style="max-width:100%" class="no-borders" src="/img/spine-examples/diamond/diamond-pro-bones.png">!!

项目中的其他动画也都是这样, 除了 `idle-still`. 它的滑块 mix 设置为 `0`, 以便自由控制之前在动画中添加了关键帧的各种元素. 用这种方法就可以创建一种更静态却仍然闪闪发亮的钻石变体.

![](/img/spine-examples/diamond/slider-mix.png)


<div class="toc-home"><p><a href="/spine-examples">Spine 示例项目</a></p></div>