javascript实现多边形碰撞检测
javascript多边形碰撞检测
原理就是循环每个顶点判断是不是在多边形内
constapp=newPIXI.Application({antialias:true}); document.body.appendChild(app.view); constgraphics=newPIXI.Graphics(); //drawpolygon constpath=[600,370,700,460,780,420,730,570,590,520]; graphics.lineStyle(0); graphics.beginFill(0x3500FA,1); graphics.drawPolygon(path); graphics.endFill(); app.stage.addChild(graphics); varxuanzhuan=PIXI.Sprite.from('/moban/images/share.jpg'); xuanzhuan.width=120; xuanzhuan.height=120; xuanzhuan.x=13; xuanzhuan.y=33; app.stage.addChild(xuanzhuan); xuanzhuan.interactive=true; xuanzhuan.buttonMode=true; xuanzhuan .on('pointerdown',onDragStart) .on('pointerup',onDragEnd) .on('pointerupoutside',onDragEnd) .on('pointermove',onDragMove); functiononDragStart(event){ //storeareferencetothedata //thereasonforthisisbecauseofmultitouch //wewanttotrackthemovementofthisparticulartouch this.data=event.data; this.alpha=0.5; this.dragging=true; } functiononDragEnd(){ this.alpha=1; this.dragging=false; //settheinteractiondatatonull this.data=null; } varposPolygon=[]; vardianlist={}; dianlist['x']=600; dianlist['y']=370; posPolygon.push(dianlist) vardianlist={}; dianlist['x']=700; dianlist['y']=460; posPolygon.push(dianlist) vardianlist={}; dianlist['x']=780; dianlist['y']=420; posPolygon.push(dianlist) vardianlist={}; dianlist['x']=730; dianlist['y']=570; posPolygon.push(dianlist) vardianlist={}; dianlist['x']=590; dianlist['y']=520; posPolygon.push(dianlist) functiononDragMove(){ if(this.dragging){ constnewPosition=this.data.getLocalPosition(this.parent); this.x=newPosition.x; this.y=newPosition.y; varbaoweihe=this.getBounds(); varyouxiajiaox=baoweihe.x+baoweihe.width; varyouxiajiaoy=baoweihe.y+baoweihe.height; varposlist=[]; varpos={}; pos['x']=baoweihe.x; pos['y']=baoweihe.y; poslist.push(pos); varpos={}; pos['x']=youxiajiaox; pos['y']=baoweihe.y; poslist.push(pos); varpos={}; pos['x']=youxiajiaox; pos['y']=youxiajiaoy; poslist.push(pos); varpos={}; pos['x']=baoweihe.x; pos['y']=youxiajiaoy; poslist.push(pos); varispengzhuang=PolygonInPolygon(poslist,posPolygon,5); if(ispengzhuang){ alert('碰撞了'); } } } functionPolygonInPolygon(posPolygonA,posPolygonB,count){ console.log(posPolygonA); varcount1=posPolygonA.length; for(vari=0;iMath.max(p1.y,p2.y)) continue; //计算交点X左边:(p2.y-p1.y)/(p2.x-p1.x)=(y-p1.y)/(x-p1.x) //直线K值相等,交点y=pos.y letx=(pos.y-p1.y)*(p2.x-p1.x)/(p2.y-p1.y)+p1.x //只统计单边交点,即点的正向方向 if(x>pos.x) cross++; } returncross%2==1; }
以上就是javascript实现多边形碰撞检测的详细内容,更多关于javascript多边形碰撞检测的资料请关注毛票票其它相关文章!