问题是,当我与平台碰撞时,它似乎使我走得比platform更高,它对我所有的平台都执行了此操作,并且知道为什么
我与平台的碰撞
job_resrcs
我的完整代码
for enemy in enemies:
if playerman.rect.colliderect(enemy.rect):
collide = True
playerman.y = enemy.rect.top - playerman.height + 1
if playerman.rect.right > enemy.rect.left and playerman.rect.left < enemy.rect.left - playerman.width:
playerman.x = enemy.rect.left - player.width
if playerman.rect.left < enemy.rect.right and playerman.rect.right > enemy.rect.right + playerman.width:
playerman.x = enemy.rect.right
答案 0 :(得分:2)
该问题隐藏在Platform
类中,因为self.platforms
与platform
不同。
注意self.platforms
缩放到其一半大小,因此在设置矩形(self.platforms
)时必须使用platform
而不是self.rect
:
self.rect = pygame.Rect(x,y,platforms.get_width(), platforms.get_height())
self.rect = pygame.Rect(x,y, self.platforms.get_width(), self.platforms.get_height())
无论如何,我建议通过get_rect()
获取矩形:
self.rect = self.platforms.get_rect(topleft = (x, y))
Paltform
类:
class enemy:
def __init__(self,x,y,height,width,color):
self.x = x
self.y = y
self.height = height
self.width = width
self.color = color
self.rect = pygame.Rect(x,y,height,width)
self.platforms = pygame.image.load("rat.png")
self.platforms = pygame.transform.scale(self.platforms,(self.platforms.get_width()//2,self.platforms.get_height()//2))
self.rect = self.platforms.get_rect(topleft = (x, y)) # <---
self.direction = "left" #set a stating direction
如果图像的顶部不是可击中的,例如散布的草,则必须按草的高度缩小击中框。
将方法添加到类enemy
中,该方法将返回点击框:
class enemy:
# [...]
def get_hitbox(self):
grass_height = 25
hitboxb = self.rect
hitboxb.top += grass_height
return hitboxb
class botts:
# [...]
def get_hitbox(self):
return self.rect
使用点击框进行碰撞检测:
for enemy in enemies:
enemy_hitbox = enemy.get_hitbox()
if playerman.rect.colliderect(enemy_hitbox):
collide = True
playerman.y = enemy_hitbox.top - playerman.height + 1
# [...]