【发布时间】:2018-01-05 23:58:17
【问题描述】:
我正在尝试使用纹理图集制作动画:
当角色朝右时效果很好。我尝试水平翻转它,但它的位置错误:
这是我当前的代码:
<canvas id="c" width="200" height="100" style="background: #000"></canvas>
var metaData = [
{x:0,y:0,w:35,h:38,offsetX:3,offsetY:9},
{x:37,y:0,w:31,h:37,offsetX:6,offsetY:10},
{x:70,y:0,w:65,h:47,offsetX:0,offsetY:1},
{x:137,y:0,w:65,h:47,offsetX:0,offsetY:1},
{x:204,y:0,w:61,h:46,offsetX:1,offsetY:1},
{x:267,y:0,w:42,h:46,offsetX:1,offsetY:1},
{x:311,y:0,w:43,h:44,offsetX:1,offsetY:3},
{x:356,y:0,w:38,h:37,offsetX:6,offsetY:10},
{x:396,y:0,w:35,h:34,offsetX:6,offsetY:13},
{x:433,y:0,w:33,h:37,offsetX:7,offsetY:10},
{x:468,y:0,w:36,h:40,offsetX:5,offsetY:7},
{x:506,y:0,w:34,h:39,offsetX:6,offsetY:8}
],
dx = 0, //position x
dy = 0, //position y
index = 0; //frame index
(function draw() {
context2D.clearRect(0,0,c.width,c.height);
var cur = metaData[index];
if(facingRight) {
context2D.drawImage(
img,
cur.x, cur.y,
cur.w, cur.h,
dx + cur.offsetX, dy + cur.offsetY,
cur.w, cur.h
);
} else {
context2D.save();
context2D.translate(cur.w,0);
context2D.scale(-1,1);
context2D.drawImage(
img,
cur.x, cur.y,
cur.w, cur.h,
dx, dy + cur.offsetY,
cur.w, cur.h
);
context2D.restore();
}
index = ++index % metaData.length;
setTimeout(draw,100);
})();
我使用scale(-1,1) 来翻转精灵,但我不知道如何让它保持在相同的位置,比如面向右侧。我应该修复偏移值吗?
请,任何帮助将不胜感激:)
【问题讨论】:
-
@Kaiido 我让它们大小一样,这个纹理图集由 TexturePacker 打包,它生成一个 JSON 文件,我使用这些信息来制作元数据。
-
我不知道这个TexturePacker,但这些不是纹理,这些是精灵。为了便于使用,您需要对齐它们,并将它们设置为相同大小的不可见框。目前他们根本不是。他们甚至没有对齐。 (字符精灵最好底部对齐)
-
@Kaiido 我在 PhotoShop 中对齐它们,并由 TexturePacker 打包,它给了我在 JSON 文件中的正确位置,如下所示:{ "filename": "00.png", "frame": {"x ":0,"y":0,"w":35,"h":38},“旋转”:假,“修剪”:真,“spriteSourceSize”:{“x”:3,“y”: 9,"w":35,"h":38}, "sourceSize": {"w":65,"h":49}, "pivot": {"x":0.5,"y":1} },每帧是 65X49,它适用于向右运动,除了翻转它。
标签: javascript html animation canvas