- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在 Pygame 中创建一个工作跳跃系统,但我在碰撞检测方面遇到了一些问题。我有一个级别存储在这样的列表中:
level = [
"WWWWWWWWWWWWWWWWWWWW",
"W W",
"W W",
"W W",
"W W",
"W W",
"W W",
"W W",
"W W",
"W W",
"WWWWWWWWWWWWWWWWWWWW",
]
x = y = 0
for row in level:
for col in row:
if col == "W":
Wall((x, y))
x += 32
y += 32
x = 0
每面墙都附加到列表中,并根据其在网格中的位置给出一个位置。
这是墙类:
class Wall (pygame.sprite.Sprite):
def __init__(self,pos):
pygame.sprite.Sprite.__init__(self)
walls.append(self)
self.rect = pygame.Rect(pos[0],pos[1],32,32)
当按下向上键并检测到玩家与其中一个图 block 之间发生碰撞时,我尝试将玩家矩形向上移动 30 像素:
if event.type == KEYDOWN and event.key == K_UP:
if player.hitCheck():
player.move(0,-30)
hitCheck() 是 Player 类的一个函数,如下所示:
def hitCheck(self):
for wall in walls:
if self.rect.colliderect(wall.rect):
return True
但是,无论是否发生实际碰撞,该函数都不会返回 True。我可以通过将碰撞的玩家侧的值设置为相关的相对墙侧的值来移动玩家矩形,而不会穿过墙壁,但这不会产生任何结果。
为什么函数在碰撞时不返回 True?
walls 最初被声明为空列表。它用在作为玩家类一部分的移动函数中:
def move_single_axis(self, dx, dy):
# Move the rect
self.rect.x += dx
self.rect.y += dy
for wall in walls:
if self.rect.colliderect(wall.rect):
if dx > 0: # Moving right; Hit the left side of the wall
self.rect.right = wall.rect.left
if dx < 0: # Moving left; Hit the right side of the wall
self.rect.left = wall.rect.right
if dy > 0: # Moving down; Hit the top side of the wall
self.rect.bottom = wall.rect.top
if dy < 0: # Moving up; Hit the bottom side of the wall
self.rect.top = wall.rect.bottom
这可以正常工作,这就是为什么我无法理解 hitCheck() 无法检测碰撞的原因。
最佳答案
你在哪里宣布隔离墙?它是全局变量吗?由于墙壁也是 Sprite 的一部分,因此您可以使用 spritecollide
而不是 colliderect
:
def hitCheck(self):
if pygame.sprite.spritecollide(self, self.walls):
return True
关于python - Pygame 函数在 CollideRect 上不会返回 True,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25618843/
我正在制作一款经典的贪吃蛇游戏。我想绘制一个绿色矩形 (green_rect),每当我的蛇接触到它时,该绿色矩形就会移动到一个新的随机位置。当我在蠕虫的表面上运行colliderect()时,由于某种
Pygame 出现问题! Colliderect 函数无法检测两个矩形何时发生碰撞!尽管没有给出错误消息,但这些矩形只是相互穿过。这是为什么?如何解决?连续几天都在为同样的问题苦苦挣扎!假设的问题点标
谢谢 BlackJack,这是包含您的建议的代码。玩家图像仅停留在左上角 (0,0)。图像在运行者数组中循环,但按左或右不会使玩家 Sprite 移动到背景图像的边缘,或移动背景图像和 block 。
在此之前,我使用代码表示“每个按钮按下它都会移动”,但现在我已将其更改为“当您按下按钮时,它会朝一个方向移动,直到收到进一步的指示”,但现在碰撞器不起作用。它以前有效,我对 pygame 还是个新手。
当 food.rect 和 snake.rect 发生碰撞时,我尝试向我的蛇克隆中的玩家添加一段片段。但是函数内的代码将不会执行。 def add_segment(self,food): if
假设我有 2 个命中框:hbox1 和 hbox2。做 hbox1.colliderect(hbox2) 和 hbox2.colliderect(hbox1) 总是返回相同的东西? 最佳答案 方法 c
我正在尝试在 Pygame 中创建一个工作跳跃系统,但我在碰撞检测方面遇到了一些问题。我有一个级别存储在这样的列表中: level = [ "WWWWWWWWWWWWWWWWWWWW", "W
编辑:QuadTrees ( http://www.pygame.org/wiki/QuadTree?parent=CookBook ) 可能是我在这里的答案,我会尝试这个并会报告回来。无论如何请不要
我正在尝试制作一个小型的无尽奔跑者并完成了大部分工作,唯一剩下的就是碰撞检测。我知道 () 函数,但无法让它工作。我可能只是做错了,但我不知道如何解决它。 现在我有一个像这样的玩家类: class P
colliderect()函数不会返回 True和 False ;相反,它返回 0和 1 .当我使用函数类型时,它说 int而不是 bool .如果我使用 0 编码和 1代码工作而不是 bool 值,
我是一名优秀的程序员,十分优秀!