问题描述
我目前正在尝试在 pygame
上制作自己的平台游戏。我已经对平台顶部和底部的碰撞进行了编码,这样玩家只有在掉到平台上时才能跳到平台顶部。但是,如果玩家走进平台的一侧,他会在平台上啪啪作响。我怎样才能让平台的侧面作为边界?
这是我在主游戏循环中的更新部分:
def update(self):
self.all_sprites.update()
hits = p.sprite.spritecollide(self.player,self.platforms,False)
if self.player.vel.y > 0:
if hits:
self.player.rect.bottom = hits[0].rect.top + 1
self.player.pos = self.player.rect.midbottom
self.player.vel.y = 0
if self.player.vel.y < 0:
if hits:
self.player.rect.top = hits[0].rect.bottom
self.player.pos = self.player.rect.midbottom
self.player.vel.y = 0
我试过用这个,但没用:
if self.player.vel.x > 0:
if hits:
self.player.rect.right = hits[0].rect.left
self.player.pos = self.player.rect.midleft
self.player.vel.x = 0
if self.player.vel.x < 0:
if hits:
self.player.rect.left = hits[0].rect.right
self.player.pos = self.player.rect.midright
self.player.vel.x = 0
这是我的播放器类:
vec = p.math.Vector2
class Player(p.sprite.Sprite):
def __init__(self,game):
p.sprite.Sprite.__init__(self)
self.game = game
self.image = p.Surface((p_width,p_height))
self.image.fill(p_colour)
self.rect = self.image.get_rect()
self.rect.center = (0,height - 30)
self.pos = vec(0,height - 30)
self.vel = vec(0,0)
self.acc = vec(0,0)
def jump(self):
self.rect.y += 1
hits = p.sprite.spritecollide(self,self.game.platforms,False)
self.rect.y -= 1
if hits:
self.vel.y = p_jump
def update(self):
self.acc = vec(0,p_grav)
keys = p.key.get_pressed()
if keys[p.K_LEFT]:
self.acc.x = -p_acc
if keys[p.K_RIGHT]:
self.acc.x = p_acc
self.acc.x += self.vel.x * p_friction
self.vel += self.acc
self.pos += self.vel + 0.5 * self.acc
if self.rect.right > width - 1:
self.rect.right = width - 1
self.pos = self.rect.midbottom
if self.rect.left < 1:
self.rect.left = 1
self.pos = self.rect.midbottom
self.rect.midbottom = self.pos
感谢任何帮助。我尽量保持代码最少
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)