从完全零基础教你用Python开饭一款打飞机的游戏!是个人就能学会
默认图片左上角为原点 (0,0)。 进群:125240963 ? ?即可获取数十套PDF!要源码也可以进群哦! 显示窗口 如果我们这样设定,当我们运行的时候,窗口会一闪而过,并不会出现我们想象的画面。因为窗口只是运行一下就会关闭,所以我们要写一个循环,使窗口一直保持出现。当然如果我们简单的写一个 while True那么我们的程序就出现了死循环,卡死。 同时我们的资源文件里还有一个叫做 shoot.pack 的文件,里面记录了每个图片所在的位置。 我们通过下面的代码加载资源图片,并且获得我们需要的主角飞机。 下一步就是完善这四个方法。 简单的说就是按下方向键的时候(w,a,s,d)飞机向四周移动,但是不能移动离开屏幕。 此时我们就应该把我们的飞机形成一个类,类里面有控制飞机的方法。 这里写类比较麻烦一点 player的控制 当飞机出现了,我们就应该实现我们在循环里写的方法。我们首先要判断它还在不在屏幕内,不能让飞机飞出屏幕。可以通过 rect.top,rect.bottom,rect.left,rect.right四个方法获取飞机图片的上下左右四个边界值。 这样我们就能对飞机进行判断 让子弹飞 子弹要沿着发射方向射出去。可以在屏幕上一直移动,直到移出屏幕。 我们只要有定义一个子弹对象,让这个对象显示在屏幕上就可以。 先定义飞机子弹类,基本和定义 player 一样,获得图片,裁剪图片,设置图片初始位置,在屏幕上显示图片 下一步就是让飞机的子弹跟随飞机。 我们需要在 Player 类里面添加方法。 首先我们规定,按下空格发射子弹。 下一步就是让子弹在屏幕上移动。 创建移动的方法。 player 的飞机就算基本绘制好了 绘制敌机 下一步就是绘制敌机。敌机是从屏幕上方移动到屏幕下方。我们任就需要一个类来设置敌机。设置类任就和我们前面的差不多,加载资源,设置 rect,设置位置。 现在我们就应该想想敌机的特点了,其实他和子弹的特点基本一直,只不过方向不一样而已。还有一点是敌机是随机生成的。 移动实现 碰撞检测 飞机和敌机还有子弹都有了,我们现在需要进行完成碰撞检测。有下面几种场景。
无论是那种情况的碰撞,其实就是两张图片有了交集。 如图 在 Player 类里面添加是否击中属性。 self.is_hit = False 修改循环 做到这里基本算是实现了飞机大战.但是还有很多细节处理。 细节处理 精细的碰撞检测 从图上看,当敌机看似还没有和我们接触时,但是已经 GameOver 了。 实际情况是这样的,所有的图片都是矩形,当两张图片的矩形边框线碰撞的时候,就算两个对象碰撞,所以我们要更加精细的使用碰撞检测。 动画 做了怎么就,感觉它没有一点动效,感觉死气沉沉的。无论是飞机飞行,还是飞机被击中,都没有一个明确的反馈。 对于2d游戏,动画其实就是一张一张的图片不停的变化。就和电影的原理类似。要想让我们的飞机动起来,我们需要定义一个列表来存放这些图片,然后写个循环,让他一直不停的更换图片就好。 首先我们更改我们的主角 Player 任就是老套路,加载图片。把加载的图片放到list 里。 飞机正常飞行的图片只有两张。所以我们要循环变化这两张图片。所以每发射一个子弹,图片变化两张。 加载图片enemies_shoot_img = [plane_img.subsurface(pygame.Rect(267,347,57,43)), plane_img.subsurface(pygame.Rect(873,697, plane_img.subsurface(pygame.Rect(267,296, plane_img.subsurface(pygame.Rect(930,43))] 这样的话基本完成了动画效果。 音乐 有了动画还的有音乐。 音乐的处理只要在特定的地方播放音乐就好,比如子弹发射的时候,背景音乐,被击中的时候,游戏结束的时候,等等。他们的处理逻辑都一样。先加载资源,然后在播放。 背景音乐的播放。 pygame 在处理背景音乐的时候都在 pygame.mixer 方法中。其中播放音乐的play中的参数,第一个为播放几次,-1 为循环播放,后面的浮点表示 从第几秒开始播放。 分数&等级 分数 首先绘制得分情况,在屏幕上显示多少分。 绘制字体基本和绘制精灵是差不多的。首先要生成字体 两个参数分别是字体和字号 我们还需要在文本的地方强制转换为 str 。 score_text = score_font.render(str(score),True,(128,128,128)) 等级 有了分数,那么再加点等级会使游戏更加有趣味性。 同样的先绘制等级。 需要源码记得私信小编哦! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |