cancas层叠问题
我想问一下老师,如何解决层叠问题
我想问一下老师,如何解决层叠问题
2015-05-21
试着做了下 ,不知道有没有什么问题
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> </head> <body> <canvas id="canvas" style="display: block; margin: 0 auto; border: 1px solid #999;"></canvas> <script type="text/javascript"> window.onload=function(){ var canvas=document.getElementById("canvas"); canvas.width=1200; canvas.height=600; var ctx=canvas.getContext("2d"); var skyStyle=ctx.createLinearGradient(0,0,0,canvas.height); skyStyle.addColorStop(0.0,'black'); skyStyle.addColorStop(1.0,'#035') ctx.fillStyle=skyStyle; ctx.fillRect(0,0,canvas.width,canvas.height); fill(canvas.width,canvas.height,5,ctx); } function fill(w,h,r,ctx){ var _data=[]; //储存星星的坐标,用于比较 var abc; for(var i=0;i<200;i++){ var R=Math.round(Math.random()*5)+r; var x=Math.round(Math.random()*(w-2*R))+R; var y=Math.round(Math.random()*(h*0.65-2*R))+R; var rote=Math.round(Math.random()*360); //判断条件,若当前位置与其他星星不重合就会返回其他星星的个数 abc=function(){ var a=0; for(var j=0;j<_data.length;j++){ if(!((_data[j][0]+_data[j][2]>x&&x>_data[j][0]-_data[j][2])&&(_data[j][1]+_data[j][2]>y&&y>_data[j][1]-_data[j][2]))){ a+=1; } } return a; } //满足条件就会重新随机坐标, 注意:画布太小星星太多可能会造成死循环 while(abc()!=_data.length){ x=Math.round(Math.random()*(w-2*R))+R; y=Math.round(Math.random()*(h*0.65-2*R))+R; } _data.push([x,y,R]); //把当前的坐标和半径添加进去,完全分离则设置为2*R drawStart(x,y,R,rote,ctx); } } //绘制图形 function drawStart(x,y,R,rote,ctx){ ctx.lineWidth=R/(R*10); ctx.lineJoin="round"; ctx.fillStyle="yellow"; ctx.strokeStyle="yellow"; ctx.save(); ctx.translate(x,y); ctx.rotate(rote/180*Math.PI); ctx.scale(R,R); startPath(ctx); ctx.fill(); ctx.stroke(); ctx.restore(); } //绘制路径 function startPath(ctx){ ctx.beginPath(); for(var i=0;i<5;i++){ ctx.lineTo(Math.cos((18+i*72)/180*Math.PI),-Math.sin((18+i*72)/180*Math.PI)); ctx.lineTo(Math.cos((54+i*72)/180*Math.PI)*0.5,-Math.sin((54+i*72)/180*Math.PI)*0.5); } ctx.closePath(); } </script> </body> </html>
举报