[英]How to make a wall sprite in pygame?
我正在构建一个游戏,我有一个玩家 class,但是当它接触块精灵的左/右侧时,它会传送到块的顶部。 我不知道如何解决这个问题。 我所见过的任何问题都没有帮助我解决这个问题。
我可以通过做检测碰撞
for entity in blocks:
If self.rect.collidepoint(entity.midleft):
Collide = true
播放器 class:
class Player(pygame.sprite.Sprite):
def __init__(self):
super(Player, self).__init__()
self.surf = pygame.Surface((40,40))
self.surf.fill((255,0,0))
self.rect = self.surf.get_rect()
self.pos = vec(0,144)
self.vel = vec(0,0)
self.acc = vec(0,0)
def move(self, pressed_keys):
self.acc = vec(0,0.5)
if pressed_keys[K_LEFT]:
self.acc.x = -ACC
if pressed_keys[K_RIGHT]:
self.acc.x = ACC
self.acc.x += self.vel.x * FRIC
self.vel += self.acc
self.pos += self.vel + 0.5 * self.acc
#if self.pos.x > W:
# self.pos.x = W
#if self.pos.x < 0:
# self.pos.x = 0
self.rect.midbottom = self.pos
def checkCollision(self):
for entity in blocks:
if self.rect.collidepoint(entity.rect.midleft) or self.rect.collidepoint(entity.rect.midright):
return True
return False
def update(self):
hits = pygame.sprite.spritecollide(self, blocks, False)
if self.vel.y > 0:
if hits:
self.pos.y = hits[0].rect.top + 1
self.vel.y = 0
def jump(self):
hits = pygame.sprite.spritecollide(self, blocks, False)
if hits:
self.vel.y = -15
我只需要一些东西来指引我正确的方向!
您必须分别对 x 和 y 轴进行碰撞测试。
首先运行 x 轴的碰撞测试。 如果玩家移动到一个块中,将玩家与块对齐:
for entity in blocks:
if self.rect.colliderect(entity):
# move left and hit the block on the right
if self.vel.x < 0 and self.rect.center > entity.right:
self.rect.left = entity.right
# move right and hit the block on the left
if self.vel.x > 0 and self.rect.center < entity.left:
self.rect.right = entity.left
之后,您可以运行 y 轴的碰撞测试:
for entity in blocks:
if self.rect.colliderect(entity):
# player is falling
if self.vel.y > 0:
self.rect.bottom = entity.top
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.