快速业务通道

飞机躲避小游戏-是男人就撑100秒的制作

作者 佚名技术 来源 服务器技术 浏览 发布时间 2012-07-08
)/L);
c) 单位化a=P1P2/(Len(P1P2))
而你要做的,只是将子弹看成是P1,你自己的飞机看成是P2,即可,最后还应把起始速度去
乘以所求得的单位向量a=(cos(fi),sin(fi))
Vx=v*cos(fi)
Vy =v*sin(fi)

3.3 碰撞检测
碰撞检测是个广泛而重要的话题,可以从简单到复杂,难度突破主要在计算几何上。这里针对本游戏谈两个:
3.3.1两个圆的碰撞检测,这个不用多说了,只要看两个圆的圆心的距离是否比它们的半径之和来的小就是了.
即圆1有:圆心O1(x1,y1),半径r1
圆2有:圆心O2(x2,y2),半径r2
则它们之间的碰撞检测可以这样来做:
If(Len(O1O2)<=r1+r2)
{
Twocirclescollide.
}
Else
{
Safecondition.
}如果在视觉效果要求比较高的场和,尤其是不允许出现物体重叠的场和,不仿在Len(O1O2) 后加上一个偏移值。这样可以保证视觉上不会看到两个物体重叠的现像,尽管在精确的数值模型上二者并未相碰。而在数值精度要求高的场和,恐怕情况就要反一下了,图形是第二位的,数据的精准才是最重要的。具体如何去平衡图形和数据间的对应关系,还请诸位自己去斟酌了。

3.3.1圆和三角形间的碰撞检测:
三角形可以用通常用一个五元组Q(P1,P2,k0,k1,k2)来表达(许多飞机的形状通常可以看成一个三角形)
对于Q(P1,P2,k0,k1,k2),其中,P1,P2是三角的位于上部和左下的两个点,假设另一个点为P3,而k0是P1,P2间的斜率,k1是指P1,P3间的斜率,k2是指P2,P3间的斜率. (各字母的意义见图1)

您所在的用户组无法下载或查看附件:triangle.jpg。
这样,三角形的三条边就可以方便的表达出来了:
如直线P1P2的二维直线方程为 y=k0(x-x1)+y1.
P1P3:y=k1(x-x1)+y1
P2P3:y=k2(x-x2)+y2这样,判定一个点是否在三解形内,就只要判断这个点是否在三条边指向三角形内的一侧.这里,如果要判的点为p(x’,y’),则根据图1的情况,有:
If(k0(x’-x1)+y1>=0&&k1(x’-x1)+y1<=0&&y’>=y2)//考虑到P2P3是水平的情况
{
Collide!
}
Else
{
SafeCondition.
}显然,这个算法并不算得上好,因为如果三解形旋转的话,原来的某直线的左侧意味着三角形的内侧可能就会意味着外侧。这时,可以考虑再增加一个三元组,用来实时指示当前的三条直线指向三角形内侧的方面,可取的情况有以下几种:
a)左侧 b)右侧 c)上侧(水平时) d下侧(水平时)

4实现部分的关键代码(AS2)
4.1粒子类:
importSMotion.*
importSColDet.*

classSPhy.CSPhyMcextendsMovieClip
{
publicvarm:Number=0;//mass

publicvarg:Number=0;//gravity

publicvarpF:Number=0;//Positiveforces,attentionhereUpCase!!!!!!!
//Becausethecompilerwasnotsoperfectasyouthink,addapheretoprepareforthecase.
publicvarr:Number=0;//whenitbecomeaball---radius.

publicvarv:Number=0;//1demisionVelocityortogetherVelocityofvx,vy
publicvarvx:Number=0;
publicvarvy:Number=0;

publicvarf:Number=0;//fractionforces.
publicvarfx:Number=0;
publicvarfy:Number=0;

publicvara:Number=0;//accleratev
publicvarax:Number=0;
publicvaray:Number=0;

//planegameuse;
publicvarbigFire:Number=0;

privatestaticvarDEAD:Number=0;
privatestaticvarLIVED:Number=1;
privatevarlife:Number;

privatevarmMotionCom:RCSMove;
privatevarmColDetCom:RCSColDet;

privatestaticvarthisP:Object;

publicfunctionsetLife(lifeValue:Number):Void
{
life=lifeValue;
}

publicfunctiongetLife():Number
{
returnlife;
}

publicfunctionisLived():Boolean
{
returnlife==LIVED;
}

publicfunctioninit():Void
{
thisP=this;
this.vx=0;
this.vy=0;
this.v=3+random(3);

this._width=10;
this._height=10;
this.r=5;

this.initCom();
}



publ

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号