我是一个中学的孩子,希望长大后可以成为一名程序员。我要去暑期学校学习编码课程,学习python和pygame。我已经足够了解python了,但是在pygame中我的手被弄湿了。在添加尝试为我的游戏添加边界的方法,但是它能够阻止屏幕的左侧和顶部,这是我的代码:

  import pygame,sys
from pygame.locals import *
pygame.init()

WIDTH = 400
HEIGHT = 400

pg = "player.gif"
bg = "y.gif"
screen=pygame.display.set_mode((WIDTH,HEIGHT))
background = pygame.image.load(bg)
player = pygame.image.load(pg)

while True:
    for event in pygame.event.get():
        if event.type == QUIT:
         pygame.quit()
        sys.exit
        x,y = pygame.mouse.get_pos()
        screen.blit(background,[0,0])
        screen.blit(player,(x,y))
        pygame.display.update()
        if x <= WIDTH:
         x = 0
        if y <= HEIGHT:
         y = 0

最佳答案

if x <= WIDTH:
  x = 0
if y <= HEIGHT:
  y = 0


这真的是您想要做的吗?每当鼠标位于边界内时,将xy设置为零吗?还是要分别限制xy仅存在于0到WIDTHHEIGHT范围内?

x = min(max(x, 0), WIDTH)
y = min(max(y, 0), HEIGHT)


此外,请注意,您的播放器精灵具有自己的宽度和高度。 x,y坐标表示子画面左上角的位置。如果要限制子画面的位置以使整个画面始终显示在屏幕上,则首先需要获取子画面的大小

spriteWidth, spriteHeight = player.get_rect().size


然后将该尺寸计入边界计算

x = min(max(x, 0), WIDTH - spriteWidth)
y = min(max(y, 0), HEIGHT - spriteHeight)


此外,在调用screen.blit(player, (x, y))之前,需要确保已执行此操作,否则将使用原始的无界坐标绘制精灵。

关于python - Pygame边界不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36876938/

10-12 17:01
查看更多