国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

HTML5Canvas實現火焰效果像火球發射一樣的示例代碼

來源:懂視網 責編:小采 時間:2020-11-27 15:11:00
文檔

HTML5Canvas實現火焰效果像火球發射一樣的示例代碼

HTML5Canvas實現火焰效果像火球發射一樣的示例代碼:Canvas是HTML5中非常重要而且有用的東西,我們可以在Canvas上繪制任意的元素,就像你制作Flash一樣。今天我們就在Canvas上來制作一款火焰發射的效果。就像古代的火球炮一樣,而且可以在瀏覽器邊緣反彈,感覺會比較屌。來看看效果圖:我們可以在這里查看火焰球
推薦度:
導讀HTML5Canvas實現火焰效果像火球發射一樣的示例代碼:Canvas是HTML5中非常重要而且有用的東西,我們可以在Canvas上繪制任意的元素,就像你制作Flash一樣。今天我們就在Canvas上來制作一款火焰發射的效果。就像古代的火球炮一樣,而且可以在瀏覽器邊緣反彈,感覺會比較屌。來看看效果圖:我們可以在這里查看火焰球
Canvas是HTML5中非常重要而且有用的東西,我們可以在Canvas上繪制任意的元素,就像你制作Flash一樣。今天我們就在Canvas上來制作一款火焰發射的效果。就像古代的火球炮一樣,而且可以在瀏覽器邊緣反彈,感覺會比較屌。來看看效果圖:

我們可以在這里查看火焰球的DEMO演示

當然,我們要來分析一下源代碼,主要是一些JS代碼。

首先很簡單地在頁面上放一個canvas標簽,并且給它點簡單的樣式:

<canvas></canvas>
canvas{
 position: absolute;
 height: 100%;
 width: 100%;
 left: 0;
 top: 0;
 cursor: crosshair;
}

接下來就來分析一下JS代碼。我們來逐步分解JS。

由于這個是二維動畫,所以我們利用canvas的getContext方法來返回一個對象,這個對象包含我們對二維動畫操作的API,代碼如下:

canvas = document.querySelector('canvas');
ctx = canvas.getContext('2d');

下面我們來定義粒子:

particles = {};
newParticle = (function(){ var nextIndex = 0; return function(x,y,r,o,c,xv,yv,rv,ov){
 particles[++nextIndex] = {
 index: nextIndex,
 x: x,
 y: y,
 r: r,
 o: o,
 c: c,
 xv: xv,
 yv: yv,
 rv: rv,
 ov: ov
 };
 };
})();

然后我們來定義火球:

fireballs = {};
newFireball = (function(){ var nextIndex = 0; return function(x,y,xv,yv,life){
 fireballs[++nextIndex] = {
 index: nextIndex,
 x: x,
 y: y,
 xv: xv,
 yv: yv,
 life: life
 };
 };
})();

這里life表示火球的生命周期,下面我們可以看到,life值會隨著火球發射力度的改變而改變。

接下來是定義鼠標拖動彈弓,準備發射火球:

mouse = {x:0,y:0,d:0};
onmousemove = function(e){
 mouse.x = e.clientX-o.x;
 mouse.y = e.clientY-o.y; var dx = mouse.x - pos1.x,
 dy = mouse.y - pos1.y;
 mouse.d = Math.sqrt(dx*dx+dy*dy);
};

charging = false;
pos1 = {x:0,y:0};
showInstructions = true;
onmousedown = function(e){
 pos1.x = mouse.x;
 pos1.y = mouse.y;
 charging = true;
 showInstructions = false;
};

onmouseup = function(){ if(charging){
 newFireball(
 mouse.x,
 mouse.y,
 (pos1.x-mouse.x)*0.03,
 (pos1.y-mouse.y)*0.03, 600
 );
 charging = false;
 }
};

可以看到,當鼠標按鍵彈起時,新建一個火球,并初始化life值。

下面是火球運動時的動畫執行代碼,包括碰到瀏覽器邊緣時的反射效果:

time = 0;
requestAnimationFrame(loop = function(){
 ctx.setTransform(1,0,0,1,0,0);
 ctx.globalCompositeOperation = 'source-over';
 ctx.globalAlpha = 1;
 ctx.fillStyle = bgColor;
 ctx.fillRect(0,0,width,height);
 
 ctx.translate(o.x,o.y); 
 if(charging){ var c = Math.floor(30+mouse.d/2);
 ctx.strokeStyle = 'rgba('+c+','+c+','+c+',1)';
 ctx.lineWidth = 4;
 ctx.beginPath();
 ctx.moveTo(pos1.x,pos1.y);
 ctx.lineTo(mouse.x,mouse.y);
 ctx.lineCap = 'round';
 ctx.stroke();
 } 
 if(showInstructions){
 pos1.x = -70;
 pos1.y = -35; 
 if(time<10){ var x = -70,
 y = -35,
 r = 30-time*2,
 a = time/10;
 }else if(time<80){ var x = (time-10)*2-70,
 y = (time-10)-35,
 r = 10,
 a = 1;
 }else if(time<90){ var x = 70,
 y = 35,
 r = 10+(time-80)*2,
 a = 1-(time-80)/10;
 }else if(time<140){ var x = 70,
 y = 35,
 r = 30,
 a = 0;
 } var dx = pos1.x-x,
 dy = pos1.y-y,
 d = Math.sqrt(dx*dx+dy*dy); if(time<80&&time>10){
 ctx.globalCompositeOperation = 'source-over';
 ctx.globalAlpha = 1; var c = Math.floor(30+d/2);
 ctx.strokeStyle = 'rgba('+c+','+c+','+c+',1)';
 ctx.lineWidth = 4;
 ctx.beginPath();
 ctx.moveTo(pos1.x,pos1.y);
 ctx.lineTo(x,y);
 ctx.lineCap = 'round';
 ctx.stroke();
 } if(time<140){
 ctx.globalCompositeOperation = 'source-over';
 ctx.globalAlpha = a;
 ctx.beginPath();
 ctx.arc(x,y,r,0,Math.PI*2);
 ctx.lineWidth = 2;
 ctx.strokeStyle = '#aaa';
 ctx.stroke();
 } if(time==80){
 newFireball(
 x,
 y,
 dx*0.03,
 dy*0.03, 240
 );
 }
 time = (time+1)%180;
 }
 
 ctx.globalCompositeOperation = 'lighter'; 
 for(var i in particles){ 
 var p = particles[i];
 ctx.beginPath();
 ctx.arc(p.x,p.y,p.r,0,Math.PI*2);
 ctx.globalAlpha = p.o;
 ctx.fillStyle = p.c;
 ctx.fill();
 } 
 for(var i in particles){ 
 var p = particles[i];
 p.x += p.xv;
 p.y += p.yv;
 p.r += p.rv;
 p.o += p.ov; 
 if(p.r<0)delete particles[p.index]; 
 if(p.o<0)delete particles[p.index];
 } 
 for(var i in fireballs){
 f = fireballs[i]; 
 var numParticles = Math.sqrt(f.xv*f.xv+f.yv*f.yv)/5; 
 if(numParticles<1)numParticles=1; 
 var numParticlesInt = Math.ceil(numParticles),
 numParticlesDif = numParticles/numParticlesInt; 
 for(var j=0;j<numParticlesInt;j++){
 newParticle(
 f.x-f.xv*j/numParticlesInt,
 f.y-f.yv*j/numParticlesInt,
 7,
 numParticlesDif,
 particleColor,
 Math.random()*0.6-0.3,
 Math.random()*0.6-0.3, 
 -0.3, 
 -0.05*numParticlesDif
 );
 }
 f.x += f.xv;
 f.y += f.yv;
 f.yv += gravity; 
 var boundary; 
 if(f.y<(boundary = edge.top+7)){
 f.y = boundary;
 f.yv *= -1;
 }else if(f.y>(boundary = edge.bottom-7)){
 f.y = boundary;
 f.yv *= -1;
 } if(f.x>(boundary = edge.right-7)){
 f.x = boundary;
 f.xv *= -1;
 }else if(f.x<(boundary = edge.left+7)){
 f.x = boundary;
 f.xv *= -1;
 } if(--f.life<0)delete fireballs[f.index];
 }
 
 requestAnimationFrame(loop);
});

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

HTML5Canvas實現火焰效果像火球發射一樣的示例代碼

HTML5Canvas實現火焰效果像火球發射一樣的示例代碼:Canvas是HTML5中非常重要而且有用的東西,我們可以在Canvas上繪制任意的元素,就像你制作Flash一樣。今天我們就在Canvas上來制作一款火焰發射的效果。就像古代的火球炮一樣,而且可以在瀏覽器邊緣反彈,感覺會比較屌。來看看效果圖:我們可以在這里查看火焰球
推薦度:
標簽: 火焰 代碼 效果
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 欧美高清亚洲欧美一区h | 国产精品综合一区二区 | 国产精品久久久久久久毛片 | 日本精品一区二区三区在线观看 | 99免费在线视频 | 中文字幕va一区二区三区 | 国产精品不卡在线 | 欧美视频精品一区二区三区 | 在线亚洲欧美日韩 | 国内精品伊人久久久久妇 | 欧美在线日韩 | 天天躁日日躁狠狠躁中文字幕老牛 | 国产免费高清视频在线观看不卡 | 草b视频在线观看 | 国产大片91精品免费观看不卡 | 欧美极品欧美精品欧美视频 | 午夜啪啪网 | 亚州激情| 在线观看精品国产 | 日本成人久久 | 国产成人精品久久二区二区 | 国产亚洲第一页 | 亚洲欧美日韩成人 | 最新国产精品电影入口 | 免费在线观看中文字幕 | 国产日韩欧美亚洲综合首页 | 欧美雌雄双性人交xxxx | 国产精品国产三级国产a | 免费观看成人www精品视频在线 | 日本高清天码一区在线播放 | 国产欧美一区二区精品性色99 | 日韩欧美在线观看 | 国产精品成人久久久 | 国产日韩视频在线 | 亚欧乱亚欧乱色视频免费 | 久久国产热 | 国产成人精品日本亚洲语音1 | 国产最新进精品视频 | 国产在线精品成人一区二区三区 | 日韩欧美国产精品第一页不卡 | 国产精彩视频在线观看 |