我好像和我在皮格特建的那个平台有矛盾。当我从左边接近他们的时候,我可以把它们弄到墙上去。当接近墙壁时,我把x速度设为零,但我仍然可以进去。有人能帮我一下吗?
我正在尝试做一个游戏,玩家必须跑动到赛道的尽头。这个平台将是一个2d,非滚动的游戏,当它完成。
import pygame as pg
pg.init()
screen = pg.display.set_mode((640, 480))
BG_COLOR = pg.Color(173, 216, 230)
def main():
clock = pg.time.Clock()
image = pg.Surface((50, 50))
image.fill(pg.Color('red'))
player_rect = image.get_rect(topleft=(200, 200))
image_ground = pg.Surface((1000, 50))
image_ground.fill(pg.Color('black'))
ground_rect = image_ground.get_rect(topleft=(0, 430))
image_ground2 = pg.Surface((300, 50))
image_ground2.fill(pg.Color('black'))
ground_rect2 = image_ground2.get_rect(topleft=(0, 330))
image_ground3 = pg.Surface((50, 50))
image_ground3.fill(pg.Color('black'))
ground_rect3 = image_ground3.get_rect(topleft=(400, 230))
screen_rect = screen.get_rect()
image_ground3.fill(pg.Color('black'))
ground_rect3 = image_ground3.get_rect(topleft=(400, 230))
screen_rect = screen.get_rect()
xv = 0
yv = 0
level = 1
while True:
for event in pg.event.get():
if event.type == pg.QUIT:
return
pressed = pg.key.get_pressed()
if pressed[pg.K_RIGHT]:
xv = xv + 0.85
if pressed[pg.K_LEFT]:
xv = xv - 0.85
xv = xv * 0.9
player_rect.x += xv
if player_rect.colliderect(ground_rect) or player_rect.colliderect(ground_rect2) or player_rect.colliderect(ground_rect3):
player_rect.y -= 1
if player_rect.colliderect(ground_rect) or player_rect.colliderect(ground_rect2) or player_rect.colliderect(ground_rect3):
player_rect.y -= 1
if player_rect.colliderect(ground_rect) or player_rect.colliderect(ground_rect2) or player_rect.colliderect(ground_rect3):
player_rect.y -= 1
if player_rect.colliderect(ground_rect) or player_rect.colliderect(ground_rect2) or player_rect.colliderect(ground_rect3):
player_rect.y -= 1
if player_rect.colliderect(ground_rect) or player_rect.colliderect(ground_rect2) or player_rect.colliderect(ground_rect3):
player_rect.y -= 1
if player_rect.colliderect(ground_rect) or player_rect.colliderect(ground_rect2) or player_rect.colliderect(ground_rect3):
player_rect.y += 5
player_rect.x -= xv
if pressed[pg.K_UP]:
if xv > 0:
xv = -8
else:
xv = 8
yv = 13
else:
xv = 0
yv = yv - 1
player_rect.y -= yv
if player_rect.colliderect(ground_rect) or player_rect.colliderect(ground_rect2) or player_rect.colliderect(ground_rect3):
player_rect.y += yv
yv = 0
player_rect.y += 1
if player_rect.colliderect(ground_rect) or player_rect.colliderect(ground_rect2) or player_rect.colliderect(ground_rect3):
if pressed[pg.K_UP]:
yv = 13
player_rect.y -= 1
player_rect.clamp_ip(screen_rect)
screen.fill(BG_COLOR)
screen.blit(image, player_rect)
screen.blit(image_ground, ground_rect)
screen.blit(image_ground2, ground_rect2)
screen.blit(image_ground3, ground_rect3)
pg.display.flip()
clock.tick(60)
if __name__ == '__main__':
main()
pg.quit()发布于 2022-03-25 05:11:38
我想出了我自己问题的答案。游戏因为四舍五入而变得很糟糕,游戏被移动0.000000000000001弄糊涂了,还把我塞进了墙上。在移动播放器之前,我用十五号四舍五入来修正它。
发布于 2022-03-25 06:24:43
当方向键被按下,你移动到墙上时,你会弹出(墙跳)。但如果你放开钥匙碰墙,你就被卡住了。我不知道如何解决这个问题,但是相关的帖子可能会对你有帮助。:)
https://stackoverflow.com/questions/71596709
复制相似问题