所以我一直在做一个游戏,到目前为止最大的问题是我们不能让玩家与球场上的任何物体相撞。相反,它们会直接穿过树。有人能告诉我为什么吗?以下是我尝试用于碰撞检测的代码:
for tree in treelist:
if self.player.rect.x == tree.rect.x:
self.player.rect.x == self.player.rect.x - 2
if self.player.rect.x == tree.rect.x + tree.rect.width:
self.player.rect.x == self.player.rect.x + 2
if self.player.rect.y == tree.rect.y:
self.player.rect.y == self.player.rect.y - 2
if self.player.rect.y == tree.rect.y + tree.rect.height:
self.player.rect.y == self.player.rect.y + 2
这是理论上的声音还是我完全错了?
几乎是合理的理论。您只检查玩家
矩形位置是否与树
矩形位置的边界完全相同。这种情况很少发生。您还需要检查玩家是否在树的边界之间,更像这样:
# check if player is overlapping the tree
if tree.rect.x <= self.player.rect.x <= tree.rect.x + tree.rect.width:
# decide on how to move player away from the tree depending on previous frame
# if player is moving forward, send them backwards from tree
if self.player.rect.prev_x < self.player.rect.x:
self.player.rect.x -= 2
# otherwise send them forwards from tree
else:
self.player.rect.x += 2
重叠检查的确切逻辑和重叠时的反应完全取决于你,但这种事情应该有效。请注意,你需要跟踪玩家在前一帧中的位置,否则你将不知道他们从哪个方向击中树。你可以这样做:
self.player.rect.prev_x = self.player.rect.x
self.player.rect.x += player_velocity
你在用pygame吗?如果是这样,有内置的< code > collider CT 函数(文档在此)。
如果不是:
请记住,快速移动的对象会使碰撞检测变得非常困难,因为它们在一帧的范围内“经过”对象!有更先进的技术来处理这一点,但现在,尽量让你的碰撞盒相对较大,事情进展相对较慢。
编辑:哎呀,我的第一句话听起来很粗鲁。不知何故,我忘记了这篇文章的标题...
我正在用Python pygame制作一个游戏,并制作了一个移动的背景,一个作为玩家的跳跃精灵和生成障碍物。现在我正在研究玩家和障碍物之间的碰撞,并编写了一些代码,但最终出现了错误: 我不知道,为什么那个类不是精灵,也不知道如何把它变成精灵。我希望修复这个错误后,碰撞工程。 播放器图像1 图像 2 背景图片3
我在PyGame中创建了两个简单的精灵,其中一个是雨伞,另一个是雨滴。雨滴被添加到一个名为< code>all_sprites的sprite组中。伞精灵有自己的组,名为< code>Umbrella_sprite 雨滴从屏幕顶部“落下”,如果其中一个碰到雨伞/与雨伞碰撞..雨滴应该被删除了。但是除了特定雨滴之外,所有其他雨滴都受此影响。
我正在与Pygame一起练习,试图学习类,对象等的一些基本用法。 现在,在http://programarcadegames.com/的帮助下,我正在制作一个基本的平台 我有一个精灵播放器和精灵平台。这些平台也可以是移动平台,它应该在碰撞时移动玩家,但是当玩家移动到其他平台时,会发生一些奇怪的传送,我现在没有看到问题。 基本上,当被推时,玩家在逻辑上没有被移动(至少对我来说是这样)。 非常感谢任何
对于我的pyplay塔防御计划,我试图弄清楚如何实现与地图上已经放置的其他塔的碰撞。 放置过程将创建一个48x48预览精灵,当它在游戏屏幕上时,该精灵将在玩家鼠标上的网格中移动。塔精灵保存在名为的组中。我有这段代码来检查精灵是否与某些地形瓷砖和塔精灵发生碰撞(这在精灵更新功能中): 循环前进部分是为了检查预览精灵是否与任何塔精灵矩形碰撞。如果是,它将变量设置为true或其他,False。 然后程序
我试图做一个简单的游戏,玩家必须要么躲闪敌人,要么向他们射击。到目前为止,玩家和敌人的部分似乎很好,但我被困在导弹的事情。我正在试图弄清楚当鼠标左键被按下时,如何在玩家旁边产卵一枚导弹。所以我正在寻找一种方法来获得玩家当前的坐标,在这些坐标的右边加上一个,如果玩家按下左边按钮,导弹的坐标会是什么。
问题内容: 在pygame中,有没有一种方法来寻找某一方之间的碰撞 一个精灵和另一个精灵的特殊一面?例如,如果 精灵A的顶部与精灵B的底部碰撞,返回True。 我肯定有办法做到这一点,但我找不到任何特别的方法 在文档中。 谢谢! 问题答案: 在PyGame中没有函数来获取侧面碰撞。 但你可以试着用 pygame.Rect.CollipePoint公司 测试是否,,, ,,,, 在里面 (pygam