python及pygame雷霆战机游戏项目实战05 改进的碰撞

简介: python及pygame雷霆战机游戏项目实战05 改进的碰撞

项目详细介绍


项目详细介绍


在这个系列中,将制作一个雷霆战机游戏。


image.png


碰撞发生了什么?


image.png


Pygame中的默认碰撞类型是使用collide_rect()函数,该函数使用两个精灵的rect属性来计算它们是否重叠。这称为AABB碰撞,它非常快速和可靠。但是,如果精灵图像不是矩形,那么就会出现如图所示的情况。矩形重叠,那么collide_rect()就是True,但是玩家会感到沮丧,因为他们觉得自己应该已经成功地躲过流星(还差点才碰到一起)。


如果发现处于这种情况,可以尝试以下几种方法:


image.png

通过使用collide_rect_ratio()函数,您可以使用较小的矩形(上图矩形的0.7倍),减少可以计为重叠的“空”空间量。根据精灵的形状,这可以很好地工作。这意味着在某些情况下,流星似乎会通过机翼而不会被视为撞击。这实际上是一个很好的情况!当游戏中的事物发生变化时,玩家不会直接注意到这一点,只会觉得他们“躲开”了一个非常接近的闪避。他们不会感到沮丧,而是会觉得自己做得很好。


image.png


另一种选择是使用圆形边界框。在流星的情况下,这是非常合适的。它不太适合飞船---在碰到飞船之外的机翼也不会算数。


设置精灵的半径


根据上面的选项,将为流星与玩家碰撞设置碰撞圈。Pygame让这很容易实现 - 只需要在每个sprite上设置一个新属性:self.radius

让从玩家开始。碰撞圈应该有多大?可以通过一些实验来获得正确的值。以下是如何在玩家精灵中执行此操作__init()__

self.rect = self.image.get_rect()
    self.radius = 25
    pygame.draw.circle(self.image, RED, self.rect.center, self.radius)

在玩家图像上绘制一个红色圆圈,以便可以看到它的外观。让为流星做同样的事情:

self.rect = self.image.get_rect()
    self.radius = int(self.rect.width / 2)
    pygame.draw.circle(self.image, RED, self.rect.center, self.radius)

玩家精灵的半径可能太大了 - 它在y轴上实际上比船的大小更大。为了更接近,让设置self.radius = 20

对于流星,想要一些角落伸出来,所以让将圆圈缩放到85%的大小:

self.radius = int(self.rect.width * .85 / 2)


更改碰撞类型


为了让游戏开始后使用这些圆圈进行碰撞测试,只需要更改spritecollide命令以使用圆形函数而不是AABB:

# check to see if a mob hit the player
    hits = pygame.sprite.spritecollide(player, mobs, False, pygame.sprite.collide_circle)
    if hits:
        running = False


项目源码及资源


获取地址


目录
相关文章
|
6月前
|
小程序 PHP 图形学
热门小游戏源码(Python+PHP)下载-微信小程序游戏源码Unity发实战指南​
本文详解如何结合Python、PHP与Unity开发并部署小游戏至微信小程序。涵盖技术选型、Pygame实战、PHP后端对接、Unity转换适配及性能优化,提供从原型到发布的完整指南,助力开发者快速上手并发布游戏。
|
8月前
|
存储 算法 区块链
从零实现Python扫雷游戏:完整开发指南与深度解析
扫雷作为Windows经典游戏,承载了许多人的童年回忆。本文将详细介绍如何使用Python和Tkinter库从零开始构建一个功能完整的扫雷游戏,涵盖游戏设计、算法实现和界面开发的全过程。
631 1
|
10月前
|
程序员 Python
使用CodeBuddy基于Pygame模块实现贪吃蛇游戏
在上班时间用 CodeBuddy 搞贪吃蛇游戏,一开始我还有点小愧疚,但现在回头想想,这简直是我打工人生活里的高光时刻!既能缓解压力,又能激发创造力、提升技术,妥妥的 “摸鱼赢家”!下次摸鱼,我准备再整点新花样,搞个俄罗斯方块啥的,美滋滋!
189 11
使用CodeBuddy基于Pygame模块实现贪吃蛇游戏
|
9月前
|
人工智能 搜索推荐 数据可视化
用 Python 制作简单小游戏教程:手把手教你开发猜数字游戏
本教程详细讲解了用Python实现经典猜数字游戏的完整流程,涵盖从基础规则到高级功能的全方位开发。内容包括游戏逻辑设计、输入验证与错误处理、猜测次数统计、难度选择、彩色输出等核心功能,并提供完整代码示例。同时,介绍了开发环境搭建及调试方法,帮助初学者快速上手。最后还提出了图形界面、网络对战、成就系统等扩展方向,鼓励读者自主创新,打造个性化游戏版本。适合Python入门者实践与进阶学习。
1096 1
|
9月前
|
存储 算法 数据可视化
用Python开发猜数字游戏:从零开始的手把手教程
猜数字游戏是编程入门经典项目,涵盖变量、循环、条件判断等核心概念。玩家通过输入猜测电脑生成的随机数,程序给出提示直至猜中。项目从基础实现到功能扩展,逐步提升难度,适合各阶段Python学习者。
687 0
|
测试技术 Python
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
684 31
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
|
Java 图形学 Python
用Python和Pygame打造绚丽烟花效果+节日祝福语
本文介绍了一款基于Python和Pygame库实现的烟花效果程序,模拟烟花发射、爆炸及粒子轨迹,结合动态文本显示祝福语,营造逼真的节日氛围。程序包括烟花类、粒子类、痕迹类和动态文本显示功能,通过随机化颜色、速度和粒子数量增加效果多样性。用户可以看到烟花从屏幕底部发射、上升并在空中爆炸,伴随粒子轨迹和动态祝福语“蛇年大吉”、“Happy Spring Festival”。文章详细解析了核心代码逻辑和技术要点,帮助读者理解如何利用Pygame库实现复杂视觉效果,并提供了未来改进方向,如优化性能、增加特效和增强交互性。
1176 20
用Python和Pygame打造绚丽烟花效果+节日祝福语
|
Python
Python实现猜数字游戏
Python实现猜数字游戏
383 0
|
存储 Python
如何使用Python实现“猜数字”游戏
本文介绍了使用Python实现“猜数字”游戏的过程。游戏规则是玩家在给定范围内猜一个由计算机随机生成的整数,猜对则获胜。代码中,首先导入random模块生成随机数,然后在循环中获取玩家输入并判断大小,提供猜小、猜大提示。通过增加猜测次数限制、难度选择、优化输入提示和图形化界面等方式可优化游戏。这篇文章旨在帮助初学者通过实际操作学习Python编程。
1394 2

推荐镜像

更多