- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个 spritesheet,我想使用 step() 来制作它的动画。
我能找到的所有 css 示例都使用 1xnumFrames 的 sprite 表我的 Sprite 表是 3x5。我正在寻找纯 CSS 解决方案。
我尝试了以下步骤,但我可以看到中间的步骤,而不是从一个步骤滑动到另一个步骤。
CSS
@-webkit-keyframes crystal-wave {
0.0% {background-position: 0px 0px;}
7.14286% {background-position: -270px 0px;}
14.28571% {background-position: -540px 0px;}
21.42857% {background-position: 0px -314px;}
28.57143% {background-position: -270px -314px;}
35.71429% {background-position: -540px -314px;}
42.85714% {background-position: 0px -628px;}
50.0% {background-position: -270px -628px;}
57.14286% {background-position: -540px -628px;}
64.28571% {background-position: 0px -942px;}
71.42857% {background-position: -270px -942px;}
78.57143% {background-position: -540px -942px;}
85.71429% {background-position: 0px -1256px;}
92.85714% {background-position: -270px -1256px;}
100.0% {background-position: -540px -1256px;}
}
@-moz-keyframes crystal-wave {
0.0% {background-position: 0px 0px;}
7.14286% {background-position: -270px 0px;}
14.28571% {background-position: -540px 0px;}
21.42857% {background-position: 0px -314px;}
28.57143% {background-position: -270px -314px;}
35.71429% {background-position: -540px -314px;}
42.85714% {background-position: 0px -628px;}
50.0% {background-position: -270px -628px;}
57.14286% {background-position: -540px -628px;}
64.28571% {background-position: 0px -942px;}
71.42857% {background-position: -270px -942px;}
78.57143% {background-position: -540px -942px;}
85.71429% {background-position: 0px -1256px;}
92.85714% {background-position: -270px -1256px;}
100.0% {background-position: -540px -1256px;}
}
@-o-keyframes crystal-wave {
0.0% {background-position: 0px 0px;}
7.14286% {background-position: -270px 0px;}
14.28571% {background-position: -540px 0px;}
21.42857% {background-position: 0px -314px;}
28.57143% {background-position: -270px -314px;}
35.71429% {background-position: -540px -314px;}
42.85714% {background-position: 0px -628px;}
50.0% {background-position: -270px -628px;}
57.14286% {background-position: -540px -628px;}
64.28571% {background-position: 0px -942px;}
71.42857% {background-position: -270px -942px;}
78.57143% {background-position: -540px -942px;}
85.71429% {background-position: 0px -1256px;}
92.85714% {background-position: -270px -1256px;}
100.0% {background-position: -540px -1256px;}
}
@keyframes crystal-wave {
0.0% {background-position: 0px 0px;}
7.14286% {background-position: -270px 0px;}
14.28571% {background-position: -540px 0px;}
21.42857% {background-position: 0px -314px;}
28.57143% {background-position: -270px -314px;}
35.71429% {background-position: -540px -314px;}
42.85714% {background-position: 0px -628px;}
50.0% {background-position: -270px -628px;}
57.14286% {background-position: -540px -628px;}
64.28571% {background-position: 0px -942px;}
71.42857% {background-position: -270px -942px;}
78.57143% {background-position: -540px -942px;}
85.71429% {background-position: 0px -1256px;}
92.85714% {background-position: -270px -1256px;}
100.0% {background-position: -540px -1256px;}
}
.crystal-waving {
/*width:14.94%;
height:23.31%;
left:22.66%;
top:37.24%;*/
border: solid thin red;
background: url("cc.png") no-repeat left top;
-webkit-animation: crystal-wave 5s steps(15) infinite; /* Safari 4+ */
-moz-animation: crystal-wave 5s steps(15) infinite; /* Fx 5+ */
-o-animation: crystal-wave 5s steps(15) infinite; /* Opera 12+ */
animation: crystal-wave 5s steps(15) infinite; /* IE 10+, Fx 29+ */
}
html
<div class="crystal-waving" style="width:276px; height:372px;"></div>
这是纹理图集
<?xml version="1.0" encoding="UTF-16"?>
<TextureAtlas imagePath="button_cc.png">
<!-- Created with Adobe Flash CS6 version 12.0.2.529 -->
<!-- http://www.adobe.com/products/flash.html -->
<SubTexture name="Button_CC0000" x="0" y="0" width="270" height="314"/>
<SubTexture name="Button_CC0001" x="270" y="0" width="270" height="314"/>
<SubTexture name="Button_CC0002" x="540" y="0" width="270" height="314"/>
<SubTexture name="Button_CC0003" x="0" y="314" width="270" height="314"/>
<SubTexture name="Button_CC0004" x="270" y="314" width="270" height="314"/>
<SubTexture name="Button_CC0005" x="540" y="314" width="270" height="314"/>
<SubTexture name="Button_CC0006" x="0" y="628" width="270" height="314"/>
<SubTexture name="Button_CC0007" x="270" y="628" width="270" height="314"/>
<SubTexture name="Button_CC0008" x="540" y="628" width="270" height="314"/>
<SubTexture name="Button_CC0009" x="0" y="942" width="270" height="314"/>
<SubTexture name="Button_CC0010" x="270" y="942" width="270" height="314"/>
<SubTexture name="Button_CC0011" x="540" y="942" width="270" height="314"/>
<SubTexture name="Button_CC0012" x="0" y="1256" width="270" height="314"/>
<SubTexture name="Button_CC0013" x="270" y="1256" width="270" height="314"/>
<SubTexture name="Button_CC0014" x="540" y="1256" width="270" height="314"/>
</TextureAtlas>
最佳答案
我不确定您将如何使用 step()
完成此操作。通常我见过使用开始和结束条件指定的 step
动画,并让 step
为您处理补间。由于您在关键帧中指定了补间条件,因此您必须确保数学计算完全匹配,这是不可能的(100/14 不会给您一个可整除的数字)。
我真的会探索您可以使用线性 Sprite 表的方法。如果您的工作流程不支持开箱即用,也许您可以使用 ImageMagick 之类的工具在“发布”中重组它。将二维图像切片并将其重组为线性图像。
最后,如果您根本无法使用线性 sprite 表,我能想到的唯一解决方案是指定包含实际过渡点的“边界”关键帧,这样动画就会在很短的时间内发生时间:
0.0% {background-position: 0px 0px;}
7.14285% {background-position: 0px 0px;}
7.14286% {background-position: -270px 0px;}
14.28570% {background-position: -270px 0px;}
14.28571% {background-position: -540px 0px;}
...
etc.
祝你好运。
关于html - CSS Sprite 动画使用带有非线性 Sprite 表的步骤而不是步进,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28419160/
有没有办法在 D 范围内创建一个步骤?例如,在 python 中, 范围(1、10、2)给我 [1, 3, 5, 7, 9] 1 .. 10 以内的所有赔率 有没有办法在 D 中使用
我在 javascript 和 css(没有 jquery 或其他任何东西)中的幻灯片作业有问题。 此幻灯片应该有两种模式,一种是 i) 自动显示图片,另一种是 ii) 手动更改它们。该按钮应分别更改
我有一个在堆栈上声明的结构。这是结构的样子: struct MyStruct { int integer; std::vector booleanVector; }; 当我使用 gdb
我的容器进入第一行,但是当 float 导致第二行开始时,第二行没有进入。如何防止踩踏? HTML echo "". $row["FirstName"]. "" . $day_month .""; C
我们在 VMWare 中运行 Linux Debian。使用 gdb 调试时,如果尝试跨过 memset/memcmp/strcmp 等...,gdb 会返回以下错误: Cannot find bou
我是一名优秀的程序员,十分优秀!