Javascript HTML5画布-从对象创建淡入淡出轨迹
所以,我有两个对象,一个应该在后面有轨迹,另一个不应该 在这里,我有一个基本的设置开始: 所以我目前使用ctx.clearRect,这显然是错误的(AFAIK)。所以我想到的是在每一帧中添加一个淡入淡出的alpha,但这会影响两个对象和画布背景 有没有办法只影响obj1而不影响背景 此外,存储每个帧位置和角度的数组不是一个选项,因为在我的原始代码中,我有动画精灵,不希望轨迹动画-。-Javascript HTML5画布-从对象创建淡入淡出轨迹,javascript,html,canvas,fade,Javascript,Html,Canvas,Fade,所以,我有两个对象,一个应该在后面有轨迹,另一个不应该 在这里,我有一个基本的设置开始: 所以我目前使用ctx.clearRect,这显然是错误的(AFAIK)。所以我想到的是在每一帧中添加一个淡入淡出的alpha,但这会影响两个对象和画布背景 有没有办法只影响obj1而不影响背景 此外,存储每个帧位置和角度的数组不是一个选项,因为在我的原始代码中,我有动画精灵,不希望轨迹动画-。- 另外,在我的原始代码中,画布背景是一幅图像,因此将淡入淡出颜色设置为与背景相同的颜色将不起作用。您正在通过覆盖
另外,在我的原始代码中,画布背景是一幅图像,因此将淡入淡出颜色设置为与背景相同的颜色将不起作用。您正在通过覆盖半透明层来创建具有淡入淡出尾部效果的圆 但你的尾巴褪色的圆圈也可以表示为静态半透明图像 左:静态图像,右:在背景图像上绘制的图像 此静态图像有几个优点:
- 该效果不会影响画布上的其他图形
- 创建后,静态图像可以快速绘制到画布上的任意x、y和旋转
- 静态图像可以覆盖背景图像,而无需进一步的像素操作
正文{背景色:象牙;}
画布{边框:1px纯红;}
$(函数(){
var canvas=document.getElementById(“canvas”);
var ctx=canvas.getContext(“2d”);
var cometImage=新图像();
cometImage.onload=函数(){
var img=新图像();
img.onload=启动;
img.src=”https://dl.dropboxusercontent.com/u/139992952/stackoverflow/nightscape.jpg";
函数start(){
ctx.fillStyle=“黑色”;
ctx.fillRect(0,0,canvas.width,canvas.height);
ctx.drawImage(img,0,0);
ctx.drawImage(cometImage,0,0);
}
}
cometImage.src=cometURL();
//创建半透明的“彗星”效果(尾部渐暗的球)
//将效果作为URL返回,该URL可用于创建图像。
函数cometURL(){
var tempCanvas=document.createElement(“画布”);
var ctx=tempCanvas.getContext(“2d”);
tempCanvas.width=canvas.width;
tempCanvas.height=canvas.height;
var-cx=250;
var-cy=250;
var r=30;
var PI2=数学PI*2;
ctx.fillStyle=“黄金”;
var梯度=ctx.createLinearGradient(250250,50,50);
渐变。添加颜色停止(0.00,“透明”);
渐变。添加颜色停止(1.00,“金色”);
ctx.线宽=40;
ctx.lineCap=“圆形”;
ctx.beginPath();
ctx.moveTo(250250);
ctx.lineTo(75,75);
ctx.strokeStyle=梯度;
ctx.stroke();
ctx.beginPath();
ctx.arc(75,75,20,0,PI2);
ctx.closePath();
ctx.fillStyle=“黄金”;
ctx.globalAlpha=0.50;
ctx.fill();
ctx.globalAlpha=1.00;
ctx.beginPath();
ctx.arc(75,75,20,0,PI2);
ctx.closePath();
ctx.fillStyle=“黄金”;
ctx.shadowColor=“金色”;
ctx.shadowBlur=5;
ctx.fill();
return(tempCanvas.toDataURL());
}
}); // end$(函数(){});
当它移动时,它是否工作?如果使用动画精灵而不是圆,这是否有效?如果物体改变方向,这个方法有效吗?是的,是的&是的(弯曲转弯和角度转弯的不同技术)。你能举一个小提琴的例子吗(只是移动,没有精灵)?
var obj = { // Had to add some random code with the fiddle -.- :P #IGNORE
x: _NUMBER,
y: _NUMBER,
vx: _NUMBER,
vy: _NUMBER,
c: _STRING,
t: _BOOLEAN
}
<!doctype html>
<html>
<head>
<link rel="stylesheet" type="text/css" media="all" href="css/reset.css" /> <!-- reset css -->
<script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script>
<style>
body{ background-color: ivory; }
canvas{border:1px solid red;}
</style>
<script>
$(function(){
var canvas=document.getElementById("canvas");
var ctx=canvas.getContext("2d");
var cometImage=new Image();
cometImage.onload=function(){
var img=new Image();
img.onload=start;
img.src="https://dl.dropboxusercontent.com/u/139992952/stackoverflow/nightscape.jpg";
function start(){
ctx.fillStyle="black";
ctx.fillRect(0,0,canvas.width,canvas.height);
ctx.drawImage(img,0,0);
ctx.drawImage(cometImage,0,0);
}
}
cometImage.src=cometURL();
// create a semi-transparent "comet" effect (ball with fading tail)
// return the effect as a URL which can be used to create an image.
function cometURL(){
var tempCanvas=document.createElement("canvas");
var ctx=tempCanvas.getContext("2d");
tempCanvas.width=canvas.width;
tempCanvas.height=canvas.height;
var cx=250;
var cy=250;
var r=30;
var PI2=Math.PI*2;
ctx.fillStyle="gold";
var gradient=ctx.createLinearGradient(250,250,50,50);
gradient.addColorStop(0.00,"transparent");
gradient.addColorStop(1.00,"gold");
ctx.lineWidth=40;
ctx.lineCap="round";
ctx.beginPath();
ctx.moveTo(250,250);
ctx.lineTo(75,75);
ctx.strokeStyle=gradient;
ctx.stroke();
ctx.beginPath();
ctx.arc(75,75,20,0,PI2);
ctx.closePath();
ctx.fillStyle="gold";
ctx.globalAlpha=0.50;
ctx.fill();
ctx.globalAlpha=1.00;
ctx.beginPath();
ctx.arc(75,75,20,0,PI2);
ctx.closePath();
ctx.fillStyle="gold";
ctx.shadowColor="gold";
ctx.shadowBlur=5;
ctx.fill();
return(tempCanvas.toDataURL());
}
}); // end $(function(){});
</script>
</head>
<body>
<canvas id="canvas" width=300 height=300></canvas>
</body>
</html>