]重合,则它每行走一步就需要把用户[网学用户上传]扫描一次,判断其是否碰撞到了用户的[网学用户上传]。Sprite类中提供了collidesWith函数,用于判断是否与某个TiledLayer、Sprite、Image的对象有图象上的重合(即游戏中的碰撞)。然而不能仅仅将用户[网学用户上传]作为其Sprite参数传递给敌人的类进行判断。因为如果发生碰撞,collidesWith成立,则两辆[网学用户上传]已经发生了图象重合,违反了规则,甚至若再进行collidesWith判断的话,其结果将永为真。为了提前预知碰撞,可以将所有[网学用户上传]的碰撞范围设定为一个比[网学用户上传]图片稍大一些的矩形,此矩形仅在[网学用户上传]前方比[网学用户上传]图形多出一个象素。在多出的11个象素中,按照每个象素依次检查此象素是否于外界发生碰撞,如果不是按照象素检查,则当[网学用户上传]与障碍物错位并同时与两种物体接触时将有可能忽略检测其中的一样物体。这样,就可以提前一步判断。如果发生碰撞,则[网学用户上传]应当选择掉转方向,此时,两辆碰撞的[网学用户上传]又因为其矩形区域不重合而不符合collidesWith的条件,就可以继续正常运行了。
敌方[网学用户上传]由于需要具有一定的智能性,以便对玩家攻击,使之具有一定的可玩性。敌人可以自动行走,但是应当在以下适当的情况下转向:首先是是否超出界面的边界,其次是是否与地图障碍物发生了碰撞,再次是是否与用户[网学用户上传]发生了碰撞。需要指出的是,当发生阻碍不能在不变方向的情况下继续行走时,并不一定立即需要采取转向的对策。如果一定发生转向,试想,当敌方碰到玩家时,如果它立即转向,将不会对玩家发射射向他的子弹,就不构成任何威胁,当然,也不能永远不转向。本程序设置为:当碰撞到障碍物或边界时立即转向,但碰到玩家[网学用户上传]时需要有一个等待的时间,这个时间由碰撞前随机取得的在某方向上的持续行走步数决定,当发生[网学用户上传]间碰撞时,此随机数将在下一次循环前减少为原来的2/3,这样就实现了加快转向的时间,避免死锁在一个方向上静止的停留过长的时间。另外,[网学用户上传]的发炮间隔和转后的具体方向都由随机数决定。[网学用户上传]之间由以上道理也不会发生重叠,但当某[网学用户上传]正从上方生成而正巧有另一辆阻碍在其生成点处,这将导致不可避免的重合。这是允许的,但需要对他们标注状态,即当[网学用户上传]刚出现时暂时允许重合,一旦在某个时间他们脱离了重合状态,就不能在允许重合,如果不设置这样的判断,刚出现的[网学用户上传]将会因为受到阻塞而永远不能前进,[网学用户上传]将混成一团。本程序中并未使用过多复杂的人工智能算法,如有时间,将可能再此方面加以完善。
3.5 子弹的运行和控制
每一个[网学用户上传]都有他自己的一颗子弹,这颗子弹在任何一辆[网学用户上传]被构造时就一直存在,直至此[网学用户上传]生命的结束,子弹的再次只是将屏幕上暂时掩盖的图象重新置于[网学用户上传]炮筒才恰当位置,并使其显示出来,这与现实中每个子弹都是单独的个体有所不同。
子弹所需要完成的任务有:
它是一个继承了Runnable虚类的可运行单独线程的对象。在其出现在屏幕上的运行周期中,每一步都需要循环检测以下条件:
是否与某[网学用户上传]发生了碰撞,即击中了这辆[网学用户上传]。子弹使用的是象素级的碰撞检测,因为子弹的图片形状不规则,如果使用矩形碰撞检测,将有可能在子弹尚未接触到物体时就已返回碰撞的真值。分为两种情况,如果此子弹来自于敌方,将只检测玩家[网学用户上传],因为敌方之间的子弹必须允许可以透明的穿过,以保证不会在敌人之间发生子弹的消减。如果来自玩家,则每一步需扫描所有
上一篇:
基于aspx的个人博客系统毕业设计论文
下一篇:
女生一定要看,不看肯定后悔!_精典日记