当前位置:天才代写 > tutorial > Python教程 > 【Pygame 课堂】第10课—— 命中目标

【Pygame 课堂】第10课—— 命中目标

2018-05-23 08:00 星期三 所属: Python教程 浏览:388

现在,我们的“打飞机”游戏已经到了万事俱备只欠东风的阶段:有了子弹也有了敌机,但它们之间还没有办法擦出火花。这节课的内容就是让玩家可以真正的“打”飞机。

 

我们判断子弹命中飞机的依据很简单:就是子弹的位置在飞机图片的内部。在线学习这不需要很精确,因为在快速的游戏过程中,人眼也无法分辨细微的差别。来看下面这张示意图:

【Pygame 课堂】第10课—— 命中目标

按照我们的设定(为了简化,假设子弹的长宽忽略不计),当子弹的坐标(b.x, b.y)在飞机的图片范围,也就是(e.x, e.y)到(e.x+e.width, e.y+e.height)所围成的矩形当中时,就可以认定是命中了。也就是满足:

e.x < b.x < e.x+e.width

e.y < b.y < e.y+e.height

 

当命中后,要做两件事:把敌机重置;把子弹重置。(之后还可以加上得分)

 

在代码中的实现:

 

def checkHit(enemy, bullet):

if (bullet.x > enemy.x and bullet.x < enemy.x + enemy.image.get_width()) and (bullet.y > enemy.y and bullet.y < enemy.y + enemy.image.get_height()):

    enemy.restart()

    bullet.active = False

 

我们把这段是否命中的检测代码写成一个函数checkHit(enemy, bullet),在主循环中,检测每一颗active的子弹是否命中任何一个enemy:

 

for b in bullets:

    if b.active:

        for e in enemies:

            checkHit(e, b)

 

运行代码,你就可以痛击敌机了,虽然效果还很突兀。

 

在游戏中,我们把这种判断两样物体是否有重合关系的处理称为“碰撞检测”。其实在pygame中,已经为我们实现好了更方便更高效的碰撞检测方法。这里自己手动实现一个简单的碰撞检测,可以对其原理有更好的认识。

【Pygame 课堂】第10课—— 命中目标

文章来源于Crossin,由课课家在线学习平台整理,转载请注明。

 

    关键字:

天才代写-代写联系方式