如何使用 pygame 制作名牌
How to make a nametag with pygame
在 Pygame 中,我正在尝试创建一个显示在矩形顶部的名称标签。但我不确定如何正确居中。我已经对如何解决这个问题做了很多研究,但一直找不到任何帖子或解决方案,所以如果有人能帮助我解决这个问题,我将不胜感激。
这是我的代码:
import pygame
run = True
pygame.init()
win = pygame.display.set_mode((500, 500))
pygame.display.set_caption("Mob Fighting Game")
vel_x = 2.5
vel_y = 10
isJump = False
Color = (255,255,255)
font = pygame.font.Font('freesansbold.ttf', 15)
class Mob():
def __init__(self, name):
self.Name = name
self.Character = None
def CreateMob(self, xPos, yPos, width, height):
if not self.Character:
self.Character = pygame.rect.Rect(xPos, yPos, width, height)
return self.Character
else:
raise AssertionError("Character already exists!")
def DrawMob(self):
if self.Character:
pygame.draw.rect(win, (255,0,0), self.Character)
class Player():
def __init__(self, name):
self.Name = name
self.Character = None
def CreateCharacter(self, xPos, yPos, width, height):
if not self.Character:
self.Character = pygame.rect.Rect(xPos, yPos, width, height)
return self.Character
else:
raise AssertionError("Character already exists!")
def DrawCharacter(self, DrawWithDisplay):
if self.Character:
pygame.draw.rect(win, (255,0,0), self.Character)
if DrawWithDisplay:
DisplayNameText=font.render(str(self.Name), 1, Color)
win.blit(DisplayNameText, (self.Character.left, self.Character.top))
Plr = Player("Jimmmy")
Chr = Plr.CreateCharacter(200, 200, 25, 25)
while run:
pygame.time.delay(10)
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
keys = pygame.key.get_pressed()
if keys[pygame.K_RIGHT]:
Chr.move_ip(vel_x, 0)
if keys[pygame.K_LEFT]:
Chr.move_ip(-vel_x, 0)
if keys[pygame.K_SPACE]:
isJump = True
if isJump:
Chr.move_ip(0, -vel_y)
vel_y -= 1
if vel_y < -10:
isJump = False
vel_y = 10
win.fill((0, 99, 0))
Plr.DrawCharacter(True)
pygame.display.update()
pygame.quit()
获取文本大小的矩形并将矩形的底部中心设置为播放器的顶部中心(参见pygame.Surface.get_rect
):
text_rect = DisplayNameText.get_rect(midbottom = self.Character.midtop)
win.blit(DisplayNameText, text_rect)
玩家class:
class Player():
def __init__(self, name):
self.Name = name
self.Character = None
def CreateCharacter(self, xPos, yPos, width, height):
if not self.Character:
self.Character = pygame.rect.Rect(xPos, yPos, width, height)
return self.Character
else:
raise AssertionError("Character already exists!")
def DrawCharacter(self, DrawWithDisplay):
if self.Character:
pygame.draw.rect(win, (255,0,0), self.Character)
if DrawWithDisplay:
DisplayNameText=font.render(str(self.Name), 1, Color)
text_rect = DisplayNameText.get_rect(bottomleft = self.Character.topleft)
win.blit(DisplayNameText, text_rect)
在 Pygame 中,我正在尝试创建一个显示在矩形顶部的名称标签。但我不确定如何正确居中。我已经对如何解决这个问题做了很多研究,但一直找不到任何帖子或解决方案,所以如果有人能帮助我解决这个问题,我将不胜感激。
这是我的代码:
import pygame
run = True
pygame.init()
win = pygame.display.set_mode((500, 500))
pygame.display.set_caption("Mob Fighting Game")
vel_x = 2.5
vel_y = 10
isJump = False
Color = (255,255,255)
font = pygame.font.Font('freesansbold.ttf', 15)
class Mob():
def __init__(self, name):
self.Name = name
self.Character = None
def CreateMob(self, xPos, yPos, width, height):
if not self.Character:
self.Character = pygame.rect.Rect(xPos, yPos, width, height)
return self.Character
else:
raise AssertionError("Character already exists!")
def DrawMob(self):
if self.Character:
pygame.draw.rect(win, (255,0,0), self.Character)
class Player():
def __init__(self, name):
self.Name = name
self.Character = None
def CreateCharacter(self, xPos, yPos, width, height):
if not self.Character:
self.Character = pygame.rect.Rect(xPos, yPos, width, height)
return self.Character
else:
raise AssertionError("Character already exists!")
def DrawCharacter(self, DrawWithDisplay):
if self.Character:
pygame.draw.rect(win, (255,0,0), self.Character)
if DrawWithDisplay:
DisplayNameText=font.render(str(self.Name), 1, Color)
win.blit(DisplayNameText, (self.Character.left, self.Character.top))
Plr = Player("Jimmmy")
Chr = Plr.CreateCharacter(200, 200, 25, 25)
while run:
pygame.time.delay(10)
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
keys = pygame.key.get_pressed()
if keys[pygame.K_RIGHT]:
Chr.move_ip(vel_x, 0)
if keys[pygame.K_LEFT]:
Chr.move_ip(-vel_x, 0)
if keys[pygame.K_SPACE]:
isJump = True
if isJump:
Chr.move_ip(0, -vel_y)
vel_y -= 1
if vel_y < -10:
isJump = False
vel_y = 10
win.fill((0, 99, 0))
Plr.DrawCharacter(True)
pygame.display.update()
pygame.quit()
获取文本大小的矩形并将矩形的底部中心设置为播放器的顶部中心(参见pygame.Surface.get_rect
):
text_rect = DisplayNameText.get_rect(midbottom = self.Character.midtop)
win.blit(DisplayNameText, text_rect)
玩家class:
class Player():
def __init__(self, name):
self.Name = name
self.Character = None
def CreateCharacter(self, xPos, yPos, width, height):
if not self.Character:
self.Character = pygame.rect.Rect(xPos, yPos, width, height)
return self.Character
else:
raise AssertionError("Character already exists!")
def DrawCharacter(self, DrawWithDisplay):
if self.Character:
pygame.draw.rect(win, (255,0,0), self.Character)
if DrawWithDisplay:
DisplayNameText=font.render(str(self.Name), 1, Color)
text_rect = DisplayNameText.get_rect(bottomleft = self.Character.topleft)
win.blit(DisplayNameText, text_rect)