设为首页 加入收藏 网站搜索 繁體中文 中国建站网 — 站长资源分享平台

关于多球碰撞

来源:136z.Com 作者:佚名 时间:2005-06-22 00:02:46

点击浏览该文件


http://www.Flash8.net/bbs/UploadFile/2004-12/200412812930994.swf
前天刚来的时候发了个两球想碰的,后来将其改得更为普遍可用,就可以实现多球的碰撞了。
*诗意制造多球的碰撞问题
_global.ball=function(xposition,yposition,vx,vy,holder_mc){//创建BALL类
this.vx=vx;//速度
this.vy=vy;//
this.holder=holder_mc;//所在的MOVIECLIP
this.holder._x=xposition;//定义MOVIECLIP的位置
this.holder._y=yposition;
this.fixV=Math.sqrt(vx*vx+vy*vy)//合成的速度
};
//////////////////////////////////////
ball.prototype.move=function(){//球移动的方法
this.pengbi();//检验是否碰壁
this.holder._x+=this.vx;
this.holder._y+=this.vy;
};
ball.prototype.pengbi=function(){//碰壁的判断
if(this.holder._x>340orthis.holder._x<52){this.vx*=-1};
if(this.holder._y>225orthis.holder._y<75){this.vy*=-1};
};
ball.prototype.ballcrash=function(v){//球碰球的方法
vardisX=this.holder._x-v.holder._x;
vardisY=this.holder._y-v.holder._y;
vardistance=Math.distance(disX,disY);
/////////求距离
varangle=Math.round(Math.atan2D(disY,disX));//求两球与X轴的夹角
varVangle1=Math.atan2D(this.vy,this.vx);//球一速度的角度
varVangle2=Math.atan2D(v.vy,v.vx);//球二速度的角度
varangleBetween2=Math.chaToFlashAngle(Vangle2-angle);//求球二的速度方向和两球连线方向的交角
varangleBetween1=Math.chaToFlashAngle(Vangle1-angle);//求球二的速度方向和两球连线方向的交角
/////////////////////////////////////
varVx1=this.fixV*Math.cosD(angleBetween1);//将速度以连线方向和垂直连线方向做速度的分解
varVy1=this.fixV*Math.sinD(angleBetween1);

varVx2=v.fixV*Math.cosD(angleBetween2);//将速度以连线方向和垂直连线方向做速度的分解
varVy2=v.fixV*Math.sinD(angleBetween2);
////////////////////////////////////
if((distance*distance)<1600){
vartemp1=Vx1;
Vx1=Vx2;
Vx2=temp1;
/////////交换碰撞方向上的速度
this.vx=Vx1*Math.cosD(angle)+Vy1*Math.cosD(angle+90);
this.vy=Vx1*Math.sinD(angle)+Vy1*Math.cosD(angle);
v.vx=Vx2*Math.cosD(angle)+Vy2*Math.cosD(angle+90);
v.vy=Vx2*Math.sinD(angle)+Vy2*Math.cosD(angle);
/////////从新合成速度
this.fixV=Math.sqrt(this.vx*this.vx+this.vy*this.vy);
v.fixV=Math.sqrt(v.vx*v.vx+v.vy*v.vy);
/////////更新速度合成
};
};
Math.atan2D=function(disY,disX){/////给MATH加一个能直接算角度的方法
varangle=Math.atan2(-disY,disX)*(180/Math.PI);
angle*=-1;
returnMath.chaToFlashAngle(angle);
};
Math.chaToFlashAngle=function(angle){/////给MATH加一个将笛卡尔坐标转成Flash坐标的方法
angle%=360;
if(angle<0){
returnangle+360;}
else{returnangle;}
};
Math.distance=function(disX,disY){////////给MATH加一个能直接算距离的方法
returnMath.sqrt(disX*disX+disY*disY);
};
Math.sinD=function(angle){////////////////改造SIN方法
returnMath.sin(angle*(Math.PI/180));
};
Math.cosD=function(angle){////////////////改造COS方法
returnMath.cos(angle*(Math.PI/180));
};
//////////////////////////////////////
/////////////////////////////////////
ball1=newball(100,200,2,2,mc1);//生成实例
ball2=newball(100,100,3.5,3.5,mc2);//生成实例
ball3=newball(300,200,3,3,mc3);//生成实例
ball4=newball(300,150,1,1,mc4);//生成实例
////////////////////////////////////
///////////球的运动//////////////////
_root.mc1.onEnterFrame=function(){
ball1.ballcrash(ball2);
ball1.ballcrash(ball3);
ball1.move();
};
_root.mc2.onEnterFrame=function(){
ball2.ballcrash(ball3);
ball2.ballcrash(ball4);

[1] [2]  下一页

Tags:

  • 好的评价 如果您觉得好,就请您
      0%(0)
  • 差的评价 如果您觉得差,就请您
      0%(0)
  • 相关文章
    广告赞助

    文章随便看看 设计素材 建站学院 网页模板 视频教程

    网友评论

    共有 0 位网友发表了评论,得分 0 分,平均 0 分    查看完整评论

    用户名: 查看更多评论

    分 值:100分 85分 70分 55分 40分 25分 10分 1分

    内 容:

             通知管理员 验证码: