J2ME下的游戏精灵的碰撞检测[Java编程]
本文“J2ME下的游戏精灵的碰撞检测[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
碰撞检测又称为冲突检测,是肯定精灵之间能否彼此冲突的一种办法.碰撞检测用来肯定精灵之间什么时刻会发生物理的彼此作用.比方,在游戏中,假如玩家精灵与小飞机精灵发生碰撞,玩家生命值将会降低.碰撞检测就是用来检测玩家与敌方(或子弹)能否发生碰撞的一种机制.在游戏计划中,有很多种办法可以处理碰撞检测.最简单的办法就是对比每个精灵的矩形边界和其他精灵的矩形边界能否穿插.这种办法效率很高,但是也有一种问题,比方并非全部的精灵都是矩形的,当他们彼此较近的错过的时刻,大概会惹起一定程度的错误.大概因为边角的重叠惹起冲突,而实际上只是透明区域的重叠.精灵的形状越不接近矩形,就会有越多的错误范例.可以想象矩形碰撞检测是多么的简单而不够切确,除非本来利用的精灵恰好是矩形的.对这项技术的一个改良办法就是将冲突矩形缩小,从而削减错误.这种办法使情形略有改进,但是又有大概引发其他大概的潜在错误,就是答应精灵在某些情形下呈现重合而不发出冲突信号.缩小后的矩形碰撞和简单矩形碰撞一样有效,因为所做的只是对比矩形能否相交.目前最有效的碰撞检测就是按照精灵图象数据来检测碰撞(即像素检测办法),这种办法实际上不是察看精灵的透明区域能否重合而是精灵图象本身能否重合.在这种情形下,只有当精灵图象重合时,才会得到一个碰撞冲突.这种是抱负的碰撞检测技术,因为其非常的切确,并且关于任何形状的对象的彼此移动都不会发生错误.
模拟矩形碰撞检测表示图
假如没有碰撞检测算法,在本游戏运行历程中,就会呈现一种可怕的局面,固然可以实现后台的移动,以及玩家飞机行驶的效果,并且玩家也可以掌握机体的行进方向,但却会存在一个导致的缺陷——当敌方飞机被我方飞机击中时,没有任何呼应,敌方飞机仍旧行驶,分值没有任何增添,仿佛什么都没有发生一样.这都是因为没有为游戏增添碰撞检测的代码所致.碰撞检测是游戏中常常利用的一种重要算法.由于检测游戏中的两物体能否发生表面接触.比方子弹能否命中敌机,敌机与玩家飞机能否相撞等.只有举行了碰撞检测才有大概在呈现上述情形后将敌机击中,并且分值有所增添等效果.
利用MIDP API来碰撞冲突,可以利用Sprite类中的一系列办法,全部这些办法都叫做collidesWith().collidesWith()办法包含三种,第一个collidesWith()办法检测的是两个精灵之间的碰撞:
collidesWith(Sprite s,Boolean pixelLevel);
要检测一个冲突,只要在精灵上调用这个办法,并传入另一个精灵.第2个参数决意了冲突检测能否按照“像素连着像素”的办法,这就相当于图象数据检测办法.假如只是但愿利用简单的矩形检测法在两个精灵之间举行检测,则可以把false值传送给collidesWith()办法.
别的两种办法辨别利用一个图象和一个平铺的图层来检测一个精灵的冲突.在利用图象的情形下,指定了图象的XY位置,并且,碰撞检测在图象和精灵上履行.平铺的图层和精灵类似,但是它利用多个平铺图象来成立一个大的合成图象,如利用一个平铺图层来成立一个围墙式的迷宫,然后检测它一个精灵的冲突,以确保精灵位于范围之内.
实现碰撞检测代码以下:
/*判断enemyShip能否被玩家子弹击中*/
for(int i=0;i<MAX_SHOT;i++)
{
for(int j=0;j<MAX_enemyShip;j++)
{
if((playerShot[i].isVisible()) &&
(playerShot[i].collidesWith(enemyShip[j],true)))
{
……//碰撞处理
}
}
}
…………
//查看玩家能否与小飞机相撞
for(int i=0;i<this.MAX_SP;i++)
if(smallPlane[i].isVisible() &&
smallPlane[i].collidesWith(playerSprite,true))
{
…………
}
出处:http://gaochaojs.blog.51cto.com/812546/187185
以上是“J2ME下的游戏精灵的碰撞检测[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |