javascript canvas检测小球碰撞
本文实例为大家分享了javascriptcanvas实现检测小球碰撞的具体代码,供大家参考,具体内容如下
定义一个canvas标签
函数以及相关的逻辑处理
exportdefault{ data(){ return{ canvas:null, ctx:null, arcObj:{} }; }, mounted(){ this.canvas=document.getElementById("canvas"); this.ctx=this.canvas.getContext("2d"); //this.move();//矩形的边缘碰撞函数 //this.moveArc();//绘制碰撞圆形,对象形式 this.moveRect() }, methods:{ move(){ letx=0; lety=0; letwidth=100; letheight=100; letspeedX=2; letspeedY=2; letctx=this.ctx; ctx.fillStyle="red"; ctx.fillRect(x,y,width,height); setInterval(()=>{ ctx.clearRect(x,y,this.canvas.width,this.canvas.height); x+=speedX; if(x>this.canvas.width-width){ speedX*=-1; }elseif(x<0){ speedX*=-1; } y+=speedY; if(y>this.canvas.height-height){ speedY*=-1; }elseif(y<0){ speedY*=-1; } ctx.fillRect(x,y,width,height); },10); //this.requestmove(x,y,width,height,ctx,speedX,speedY);//请求帧的动画过程 }, requestmove(x,y,width,height,ctx,speedX,speedY){ ctx.clearRect(x,y,this.canvas.width,this.canvas.height); x+=speedX; if(x>this.canvas.width-width){ speedX*=-1; }elseif(x<0){ speedX*=-1; } y+=speedY; if(y>this.canvas.height-height){ speedY*=-1; }elseif(y<0){ speedY*=-1; } ctx.fillRect(x,y,width,height); window.requestAnimationFrame( this.requestmove(x,y,width,height,ctx,speedX,speedY) ); }, moveArc(x,y,r,speedX,speedY){ this.x=x; this.y=y; this.r=r; this.speedX=speedX; this.speedY=speedY; this.moveUpdata=function(){ this.x+=this.speedX; if(this.x>this.canvas.width-this.r){ this.speedX*=-1; }elseif(this.x<0){ this.speedX*=-1; } this.y+=this.speedY; if(this.y>this.canvas.height-this.r){ this.speedY*=-1; }elseif(this.y<0){ this.speedY*=-1; } }; }, moveRect(){ //面向对象编程 functionRect(x,y,width,height,color,speedX,speedY,ctx,canvas){ this.x=x; this.y=y; this.width=width; this.height=height; this.color=color this.speedX=speedX this.speedY=speedY this.ctxRect=ctx this.canvas=canvas } Rect.prototype.draw=function(){ this.ctxRect.beginPath(); this.ctxRect.fillStyle=this.color this.ctxRect.fillRect(this.x,this.y,this.width,this.height) this.ctxRect.closePath(); } Rect.prototype.move=function(){ this.x+=this.speedX if(this.x>this.canvas.width-this.width){ this.speedX*=-1 }elseif(this.x<0){ this.speedX*=-1 } this.y+=this.speedY if(this.y>this.canvas.height-this.height){ this.speedY*=-1 }elseif(this.y<0){ this.speedY*=-1 } } letrect1=newRect(0,100,100,100,'red',2,2,this.ctx,this.canvas) letrect2=newRect(300,100,100,100,'blue',-2,-2,this.ctx,this.canvas) //rect1.draw(); //rect2.draw() letanimate=()=>{ this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height) rect1.draw() rect1.move() rect2.draw() rect2.move() letrect1Min=rect1.x; letrect1Max=rect1.x+rect1.width letrect2Min=rect2.x letrect2Max=rect2.x+rect2.width letmin=Math.max(rect1Min,rect2Min) letmax=Math.min(rect1Max,rect2Max) if(min样式控制
#canvas{ border:1pxsolidblack; }以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。