一个撞砖块的小游戏及源码
作者 佚名技术
来源 服务器技术
浏览
发布时间 2012-07-11
开学了,本以为可以继续开心的进行游戏及物理在Flash中的相关设计的。 唉~~~可是开了学才知道一切都很现实,该学的东东还是得学(虽然很多我认为有些东西对我没用,比方说:对我来说很难的硬件),练FLASH变成了很少,一个月只做了一个小游戏,先请大家看看效果: 点击浏览该文件 先讲一下我的开发环境,我的签名档里你应该看得到(我觉得昨在外读书不应该多花父母的钱,要买好的电脑,应该自己挣),其实,这样配置的电脑,最大的一个好处,在于可以使你努力的去优化你的代码。 我用了一个很简单的方法来近似的测一个函数的执行时间: var starts=getTimer(); var result=Fun(a,b...); var ends=getTimer(); var k=ends-starts; trace(k); trace(result); 结果HITTEST的执行时间为3MS,而我一开始写的碰撞检测,平均要耗30MS,这在我的机子上是玩不了的,后来,经过优化后,变成了平均4MS,与HITTEST已相差无几,我觉得很满意。最后,至少在我的机子上,这个游戏还是能玩的。 我只挑本小游戏中几个最关键的部分讲一下: 1小球与砖块的碰: 这是一个球与矩形的碰撞问题,我讲一下我的思路。 其实,参考两个球的碰撞检测的话,可以想向,如果让小球贴着矩形的边缘走一圈,围出的那个类似于跑道的图形即为球体与矩形碰撞检测区域(小球的检测点为其圆心)。 如图 解决这个问题:有两个方法比较好(可惜偶数学水平不够,还不会) a)用曲线拟合的方法求出这个类似跑道的形状的函数表达式(图形学,计算方法及数值分析课程学过后就好了)比方说,是y=a(7-x)^6+b(3-x)^3-(5+x)^2,此时,只要用相关的点在图形内的判定便可以解决这样的碰撞检测了。 b)用离散数学的方法,用离散的方法求解图形的问题时,你要做的只是加减法,及逻辑判断, 对代码的执行效率的提高是很重要的。 由于我水平菜,只能用最土的方法来做了。 如图,把判定区域划分成8个部分,进行判定。 其中的1,3,6,8用圆心和矩形的四个顶点的距离是否小于圆的半径来做。 而其它的只要用相关的触边判定就行了。 我现在用的比较优化的判定函数是这样的:(我就不逐句解释啦,真的不难,只不过有几句比较长而已,但一切都只为了优化,虽然看上去有些不美观。) function HitBrackDetectTwo(ball, rect) { if (ball._x>rect._x-rect._width/2-ball.r && ball._x } } else if (ball._y } else if ((ball._x-(rect._x-rect._width/2))*(ball._x-(rect._x-rect._width/2))+(ball._y-(rect._y+rect._height/2))*(ball._y-(rect._y+rect._height/2)) } } else if (ball._x } else { if (ball._y } } else if (ball._y } else if ((ball._x-(rect._x+rect._width/2))*(ball._x-(rect._x+rect._width/2))+(ball._y-(rect._y+rect._height/2))*(ball._y-(rect._y+rect._height/2)) } } } else { return 0; } } 2小球与横杆的碰撞。 与上面的有点类似,相对简单些,要注意的一点就是,在刚好碰到杆的边缘时,小球应该是按原来的速度的相反方向返回, 函数如下: function HitPoleDetectTwo(m |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
上一篇: Timeline窗口Switch讲解下一篇: 简单的跳动文字效果的制作
关于一个撞砖块的小游戏及源码的所有评论