gpt4 book ai didi

JavaScript Canvas 动画

转载 作者:行者123 更新时间:2023-11-28 10:13:49 26 4
gpt4 key购买 nike

我正在尝试使用纹理图集和 Canvas 标签来制作一些动画。我没有收到任何错误,但我看到的只是最后一帧。我应该做什么才能看到所有“框架”?

我已经通过硬编码纹理图集中的 x/y 坐标对此进行了测试,因此我知道我可以围绕它进行巡航。

这是我的代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


<html lang="en">
<head>
<meta charset="utf-8">
<title>Canvas Animation</title>
<!-- meta tags -->
<meta name="keywords" content="">
<meta name="description" content="">

<!-- javascript -->

<script language="javascript">

var textureAtlas = new Image();
var moeImg = new Image();

function init() {

animateProps = new Array;

textureAtlas.src = "images/textureatlast1.png";
moeImg.src = "images/moe.jpg";
var textureAtlasCoords = new Array("0,0", "100,0", "200,0", "300,0", "400,0", "500,0", "600,0");

for(var c=0; c<textureAtlasCoords.length; c++) {

animateObj = new Object();

var thisCoord = textureAtlasCoords[c];
var thisCoordSplit = thisCoord.split(",");
var thisX = thisCoordSplit[0];
var thisY = thisCoordSplit[1];

//var a = setTimeout(Function(){animate(ctx, textureAtlas, thisX, thisY)},1000);
animateObj['canvasId'] = "princessAnimation";
animateObj['imgsrc'] = textureAtlas;
animateObj['x'] = thisX;
animateObj['y'] = thisY;

animateProps.push(animateObj);

var a = setInterval(function(){animate(animateProps);},1000);

}

clearInterval(a);

}


function imgDraw(ctx, thisImg) {

console.log(thisImg);
//(image, x(
ctx.drawImage(thisImg,0,0, 1024, 451, 0, 0, 1024, 451);

}

function animate() {

//get animation properties
for(thisProp in animateProps) {
var canvasId = animateProps[thisProp]['canvasId'];
var thisImg = animateProps[thisProp]['imgsrc'];
var thisX = animateProps[thisProp]['x'];
var thisY = animateProps[thisProp]['y'];

}

var canvas = document.getElementById(canvasId);
if (canvas.getContext){

var ctx = canvas.getContext('2d');
ctx.clearRect(0,0,1024,451);
ctx.drawImage(thisImg,thisX,thisY, 1024, 451, 0, 0, 1024, 451);
}

}
</script>

<!-- stylesheets -->

<!--conditional comments -->

</head>

<body onload="init();">


<div id="animationWrapper">
<canvas width="100" height="150" id="princessAnimation"></canvas>
</div>

</body>
</html>

这是我正在使用的图像(注意:我知道每个文件的坐标都是关闭的,现在我只是想让过渡工作,然后我将微调 x/y 坐标(当然除非你想为我做这件事。:D)

enter image description here

最佳答案

这是间隔。您在 animate 被触发之前将它们全部设置,覆盖之前的间隔。所以你只需继续打印 0,600 坐标即可。从我所看到的来看,这并不是唯一的错误,但这就是你只能得到最后一张图像的原因。

插入每个坐标,然后使用间隔循环播放动画。在所有推送都被推送之前不要设置间隔,然后使用全局来计算步数,在动画上递增(重新绘制到 Canvas 时)。

例如(简化,这可能需要一些工作才能按照您想要的方式工作):

var textureAtlas = new Image(),
steps = 0, maxsteps = 0;
//var moeImg = new Image();
var a;


function init() {

animateProps = new Array;

textureAtlas.src = "textureatlas1.png";
//moeImg.src = "images/moe.jpg";
var textureAtlasCoords = new Array("0,0", "100,0", "200,0", "300,0", "400,0", "500,0", "600,0");
maxsteps = textureAtlasCoords.length;
for(var c=0; c<textureAtlasCoords.length; c++) {

animateObj = new Object();

var thisCoord = textureAtlasCoords[c];
var thisCoordSplit = thisCoord.split(",");
var thisX = thisCoordSplit[0];
var thisY = thisCoordSplit[1];

//var a = setTimeout(Function(){animate(ctx, textureAtlas, thisX, thisY)},1000);
animateObj['canvasId'] = "princessAnimation";
animateObj['imgsrc'] = textureAtlas;
animateObj['x'] = thisX;
animateObj['y'] = thisY;

animateProps.push(animateObj);
}
a = setInterval(function(){animate(animateProps);},1000);
}
function animate() {
if(steps>=maxsteps) steps =0;
//get animation properties

var canvasId = animateProps[steps]['canvasId'];
var thisImg = animateProps[setps]['imgsrc'];
var thisX = animateProps[steps]['x'];
var thisY = animateProps[steps]['y'];

var canvas = document.getElementById(canvasId);
if (canvas.getContext){

var ctx = canvas.getContext('2d');
ctx.clearRect(0,0,1024,451);
console.log(thisX+" "+thisY);
ctx.drawImage(thisImg,thisX,thisY, 1024, 451, 0, 0, 1024, 451);
}
steps++;
}

我也不太确定 ctx.drawImage(thisImg,thisX,thisY, 1024, 451, 0, 0, 1024, 451);...我觉得你是没有将图像绑定(bind)到正确的参数。请记住 ctx.drawImage 是img、sx、sy、sw、sh、dx、dy、dw、dh 作为参数。img - 图像。sx、sy、sw、sh - 剪辑到由此定义的矩形。dw、dh - 缩放到这些尺寸dx, dy - 此处的位置。

希望对一些人有帮助。

关于JavaScript Canvas 动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7000586/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com