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


项目源码及资源


获取地址


目录
相关文章
|
1月前
|
JSON 开发工具 git
基于Python和pygame的植物大战僵尸游戏设计源码
本项目是基于Python和pygame开发的植物大战僵尸游戏,包含125个文件,如PNG图像、Python源码等,提供丰富的游戏开发学习素材。游戏设计源码可从提供的链接下载。关键词:Python游戏开发、pygame、植物大战僵尸、源码分享。
|
2月前
|
IDE 开发工具 Python
Python扑克游戏编程---摸大点
Python扑克游戏编程---摸大点
64 1
|
3月前
|
Python
python编写下象棋游戏|4-14
python编写下象棋游戏|4-14
|
3月前
|
人工智能 算法 图形学
总有一个是你想要的分享40个Python游戏源代码
这是一系列基于Python开发的游戏项目集合,包括中国象棋、麻将、足球、坦克大战、扑克等多种类型游戏,运用了Pygame等库实现图形界面与AI算法。此外还包含迷宫、数独、推箱子等益智游戏及经典游戏如《仙剑奇侠传二战棋版》和《星露谷物语》的Python版本,适合编程学习与娱乐。
173 11
|
2月前
|
数据采集 前端开发 Python
Python pygame 实现游戏 彩色 五子棋 详细注释 附源码 单机版
Python pygame 实现游戏 彩色 五子棋 详细注释 附源码 单机版
93 0
|
3月前
|
消息中间件 数据采集 数据库
庆祝吧!Python IPC让进程间的合作,比团队游戏还默契
【9月更文挑战第7天】在这个数字化时代,软件系统日益复杂,单进程已难以高效处理海量数据。Python IPC(进程间通信)技术应运而生,使多进程协作如同训练有素的电竞战队般默契。通过`multiprocessing`模块中的Pipe等功能,进程间可以直接传递数据,无需依赖低效的文件共享或数据库读写。此外,Python IPC还提供了消息队列、共享内存和套接字等多种机制,适用于不同场景,使进程间的合作更加高效、精准。这一技术革新让开发者能轻松应对复杂挑战,构建更健壮的软件系统。
46 1
python小游戏,pygame手写俄罗斯方块
python小游戏,pygame手写俄罗斯方块
|
23天前
|
人工智能 数据可视化 数据挖掘
探索Python编程:从基础到高级
在这篇文章中,我们将一起深入探索Python编程的世界。无论你是初学者还是有经验的程序员,都可以从中获得新的知识和技能。我们将从Python的基础语法开始,然后逐步过渡到更复杂的主题,如面向对象编程、异常处理和模块使用。最后,我们将通过一些实际的代码示例,来展示如何应用这些知识解决实际问题。让我们一起开启Python编程的旅程吧!
|
22天前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。
|
10天前
|
Unix Linux 程序员
[oeasy]python053_学编程为什么从hello_world_开始
视频介绍了“Hello World”程序的由来及其在编程中的重要性。从贝尔实验室诞生的Unix系统和C语言说起,讲述了“Hello World”作为经典示例的起源和流传过程。文章还探讨了C语言对其他编程语言的影响,以及它在系统编程中的地位。最后总结了“Hello World”、print、小括号和双引号等编程概念的来源。
101 80