gpt4 book ai didi

python - pygame定义不同的位置顺序会产生不同的结果

转载 作者:行者123 更新时间:2023-12-01 06:32:49 24 4
gpt4 key购买 nike

我定义了对象的不同位置顺序,然后我发现它出错了。

  1. 我希望我的 button_surface 位于屏幕的中心,所以我定义
    self.button_surface_rect.center = self.setting.screen_rect.center

  2. 然后将text_surface_rect放在屏幕的中心
    self.text_surface_rect.center = self.setting.screen_rect.center

  3. text_rect放在text_surface的中心
    self.text_rect.center = self.text_surface_rect.center

当我位 block 传输屏幕时,我的 text_surface 上没有文本,为什么?

代码如下:

#!/usr/bin/python
import sys,os
import pygame
class Setting():
def __init__(self,width,height):
self.w=width
self.h=height
self.flag=pygame.RESIZABLE
self.color=(255,255,255)
self.screen=pygame.display.set_mode((self.w,self.h),self.flag)
self.screen_rect=self.screen.get_rect()
pygame.display.set_caption("Muhaha")


class Button():
def __init__(self,setting,text):
self.setting = setting
self.text_color=(0,0,255)
self.button_color=(0,100,100)

self.rect=pygame.Rect(0,0,400,100)
self.rect.center = self.setting.screen_rect.center

self.text=pygame.font.Font(None,80).render(text,True,self.text_color)
self.text_surface=pygame.Surface((400,100))
self.text_surface.set_colorkey((0,0,0))

self.button_surface=pygame.Surface((400,100))
self.button_surface.set_alpha(128)

self.button_surface_rect = self.button_surface.get_rect()
self.button_surface_rect.center = self.setting.screen_rect.center

'''when i define this i cant see the textz'''
self.text_surface_rect = self.text_surface.get_rect()
self.text_surface_rect.center = self.setting.screen_rect.center

self.text_rect = self.text.get_rect()
print(self.text_rect)
print(self.text_surface_rect)
self.text_rect.center = self.text_surface_rect.center
print(self.text_rect)

def blit_button(self):
self.button_surface.fill(self.button_color)
self.setting.screen.blit(self.button_surface,self.button_surface_rect)
self.text_surface.blit(self.text,self.text_rect)
self.setting.screen.blit(self.text_surface,self.button_surface_rect)



def game():
pygame.init()
setting=Setting(1200,800)
button=Button(setting,'PLAY')


while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
setting.screen.fill((255,0,0))
button.blit_button()
pygame.display.flip()
game()

最佳答案

self.setting.screen_rect.center是大屏幕的中心。但文本并未blit到屏幕上,而是在小text_surface上进行blit。

self.text_surface.blit(self.text,self.text_rect)  

text_surface 的大小为 (400, 100),但 self.text_rect 的中心为 (600, 400)。

如果你这样做

self.text_surface_rect.center = self.setting.screen_rect.center

[...]

self.text_rect.center = self.text_surface_rect.center

那么 self.text_surface_rect 的位置远离 self.text_surface 的边界。屏幕中心 (self.setting.screen_rect.center) 为 (600, 400)。但text_surface的大小是(400, 100)。

+--------------+
| text_surface |
+--------------+
size: (400, 100)

+----------+
| text_rect| center: (600, 400)
+----------+
<小时/>

注意 text_surface_rect(400, 350, 400, 100),但是 text_surface 是一个 Surface 对象,并且没有位置大小为 (400, 100)。您可以将其视为一个矩形 (0, 0, 400, 100)。
文本在 text_surface 上进行 blit,而不是在 text_surface_rect 上。

<小时/>

您必须计算相对于 self.button_surface_rect 的位置,而不是 self.setting.screen:

self.text_surface_rect.center = (self.setting.screen_rect.centerx - self.button_surface_rect.x,
self.setting.screen_rect.centery - self.button_surface_rect.y)

关于python - pygame定义不同的位置顺序会产生不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59810922/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com