首先要解决的一个最常用的东西就是"碰撞的检测"
回忆一下你所接触个各类游戏.....
是吧,不管飞行还是格斗还是RPG...都回很频繁的与"碰撞"这个词打交道
比如现在我们做一个飞机游戏吧:
一般做法:将hitTest方法加到子弹MC上.接合FOR...IN...循环检测所有的敌机是否与子弹发生碰撞.
试想一下,如果屏幕上有50发子弹.敌机2架.那么,为第一个子弹上加上这样的代码
bullet.onEnterFrame=function(){
for(enemy in enemyarea){
if(this.hitTest(eval("enemyarea."+enemy)))
{removeMovieClip(this);removeMovieClip(eval("enemyarea."+enemy))}}
}
先不说可能出现的碰撞误差了.就刚刚这个假设,50发子弹,2架敌机,也就是每一桢,就有50个onEnterFrame中进行2次判断.处理复杂度也就是50*2=100
现在我们换一下思路,把碰撞检测写在敌机上呢?毕竟大多数情况下,飞机要比子弹少.
当然,如果我们还用和上边类似的FOR...IN...循环,那处理复制度还是一样的.不过是变成2*50=100罢了.
所以,要想一种更有靠和高效点的办法.
可以从传统做法上看出.大过数的子弹都在做无效检测.也就是说,他本身并没有碰到任何东西,但检测碰撞这一操作仍然是在进行.只不过hitTest不会返回TRUE值罢了.所以,资源就浪费在了那些没有结果的检测上了.所以我们下边在用敌机做检测者的时候,要用到另一种检测手段了.
注意上边那段代码里的那个"enemyarea",这个MC是包含了所有敌机的MC.我把相同类型的对象封装在一个大的MC中.这样便于FOR...IN...查询,而不用在FOR...IN...里再嵌套多的对象名判定.同理,下面我将所有的子弹MC也封装在一个大的MC中.我为它取个实例名叫"bulletarea".
而子弹的设计上又要有一点技巧了.
子弹由两部分组成,一个是看得见的子弹形状,一个是看不见的感应域.后者比前者大.用来感应碰撞.
看得见的子弹形状也是一个MC,实例名就设为"inbullet".整个子弹的实例名为"bullet"
好,MC设计好了.假设还是开始的那种情况,即,屏幕上有50发子弹,2架敌机.
现在我们在敌机上写上代码.
this.onEnterFrame=function()
{
if(bulletarea.hitTest(this._x,this._y,true))
{checkcol(this)}
}
function checkcol(who)
{ for(each in bulletarea){
if(eval("bulletarea."+each).inbullet.hitTest(eval(who))){
removeMovieClip(eval("area."+each));removeMovieClip(eval(who))
}}
}
看出区别来了么?
因为这句"if(bulletarea.hitTest(this._x,this._y,true))"的判定,让飞机直接去检测整个子弹域--bulletarea,查看是否有碰撞的情况发生.这里检测的是整个大的MC,而不是去盲目地检测是否和每一颗子弹发生碰撞.毕竟,要同时和所有子弹发生碰撞也不容易.所以,先确定一下到底有没有碰撞的情况发生再说吧.
当真的有碰撞发生了,再执行checkcol(who)函数,用for...in...接合子弹内核inbullet碰撞检测,从而从子弹域里找到和自己发生碰撞的那个子弹.并删除它,然后再删除自己,当然,你也可以不急着删除自己.因为你还可以考虑血量嘛.这样一来,一般情况下影片每运行一桢只做了2次判断.如果有一个飞机出现碰撞情况了,那个飞机执行checkcol函数,那么就会有2+50=52次.如果不幸两个飞机都中弹了.那也无非比传统的检测方式多两次判断而已.总体来说,资源大大节约啊.
所以说,这种方式的碰撞检测,从一定程度上避免了"无用功检测"的情况.且运用了反馈式检测,即,先由敌机上的轴心点与子弹进行点检测,再由子弹内核进行边沿检测.这样,检测的效率也就更高,更可靠了.
规划和更好舒服的飞机上方的社会化的看电视 急色鬼地方官几个点附近的共和党的还是更好的合格和igdfhhh哈哈度ufysduygsdysugudusfsigffgu和规范和规划建设的看过很多韩国进口大幅的获得法国和进口的风格和地方更好的话封建国家公积金的符合国家的生活的计划的恢复经济jjjfkhgkshsgahkdjghkhdshsefhhfe9加咖啡swf对方的服务费用的公司的将发生的赶赴事故鲨鱼发挥还是符合规范覅我发的是法国的司法是否合法和沙发上的繁华似及发放的祭祀合法v合法的方法丢覅ujfdfhfdffdfuf的发生的恢复速度都是非法司法和对方的反应地方方法发到烦的发生于覅uuif 烦打发打发烦要风得风说服对方的身份压缩的反应假的计划的和合格的风景的事发生大幅福建省经济哈德上飞机撒大概上的积分活动和福建省的发生的空间发的身份还是个咖啡壶ufifh上的沙发可还是开发商的繁华的身份的合法化的呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵儿科的符合不如个科技的复合热加工因特网的经费和力量 呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵好 和发动机了手机事件发生的负担和会计师和进口 utrtyretybuturetiretgrehtiertr热热uitretiyerreuyre环节的设计和发沙发沙发就发个地方觉得舒服的搜房和暗访过怕我覅还挺便宜法技术评估摊位费uhryfiufygweidjhaithhuefjdefrirhfedfhgb 共同哟覅的话v和共同负担上的分割法v的打算估计哦舒服的深深地机会说的是符合的是否还会释放他愤怒,一个异常退出天涯不吃饭此次推出传统此次特别特别法庭沟通沟通福特的v有的人v分布图给他不让发布天天给他发brt法不同个体 ug还有一样有意义iyuigughhiuytyuhhuhyujhhjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj积极解决经济将积极解决经济斤斤计 欧服的四大家韩国服饰符合的书法家的手法好的师傅家都是覅的手机偶发打算复读搜ihfiodsfusfijsdfjs 的师傅u盾是佛教的四偶发的舒服一点死哦飞机互动覅记得是粉红的司机发动随附近的事故手机业务和分工爱抚覅偶就是的噶发 依风听雨utyy较
"超级群雄传”;“新仙剑奇侠传”;“大鱼吃小鱼”
百度一下“QQ斗牛” 十一怀柔... 金花花的幸福家庭 金花花的幸福家庭 播放:4,248 梅花教室1-围巾扎法秀 梅花教室1-围巾扎法秀 播放:9,042 新扎师兄 新扎师兄 播放:9,...3、倡廉洁之风,养浩然之气。orvagk