# MENU
def gameMenu():
intro = True
while(intro == True):
win.fill((0,0,0))
iPATH = f"{PATH}/assets/textures/titleScreen/buttons"
win.blit(pygame.image.load(os.path.join(f"{iPATH}/startSelected.png")), (screenSize/2,500))
iPATH = f"{PATH}/assets/textu
win.blit(pygame.image.load(os.path.join(f"{iPATH}/Logo.png")), (screenSize/2,50))
pygame.display.update()
keys = pygame.key.get_pressed()
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
if keys[selectButton]:
print("clicked z")
break
elif keys[backButton]:
print("clicked x")
else:
pass
screenSize = 800 btw 因此,您已经看到,我已经尝试将其除以2,但是它看起来像这样:https://imgur.com/a/VXeFW7D
有什么想法吗?
答案 0 :(得分:1)
您犯了一个简单的数学错误。如果屏幕尺寸为800,然后将其除以2,则得到400。因此,如果图像的宽度为100像素,则将覆盖400到500像素,因此向右倾斜。>
如果要使图像居中,则需要考虑其宽度的一半。因此,您获得左上角x坐标的计算应如下所示:
x_centered = screen_width / 2 - image_width / 2
y_centered = screen_height / 2 - image_height / 2 #similarly..
适应当前项目的细节应该很简单。
答案 1 :(得分:1)
首先,按照惯例,您应该将屏幕Surface
命名为screen
。
然后,您将在while
循环中一次又一次地加载图像文件。只需加载一次。
加载图像后(几乎)始终使用convert
也很不错,这样Surface
的像素格式将与屏幕相同。
最后,在pygame中,应该将Rect
类用于(几乎)与绘图/位置有关的所有内容。
在这里您可以看到使用Rect
类将某内容居中是多么容易。我还对循环进行了重新排序,以遵循经典的输入/更新/绘制约定,为简洁起见,删除了第二张图片:
def gameMenu():
iPATH = f"{PATH}/assets/textures/titleScreen/buttons"
logo = pygame.image.load(os.path.join(f"{iPATH}/Logo.png")).convert()
logo_rect = logo.get_rect(center = screen.get_rect().center)
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
return
keys = pygame.key.get_pressed()
if keys[selectButton]:
print("clicked z")
break
elif keys[backButton]:
print("clicked x")
screen.fill((0,0,0))
screen.blit(logo, logo_rect)
pygame.display.update()