我正试着用pygame做一个简单的对话系统。我有一个简单的对话框类。
class Dialog:
def __init__(self, npc, player):
self.player = player
self.npc = npc
self.step = 0
self.text_counter = 0
self.text = ["Hi ",
"Hello",
"are you boss or something!?!",
"What!"]
def update(self, key):
if step and self.player.colliderect(self.npc):# if pressed key and if player hits npc
self.step += 1 # skip to next text
if self.step > len(self.text)-1:
self.step = 0
def draw(self, screen):
draw_text(
screen,
self.text[self.step],
50,
(255, 0, 0),
50,
50
)`
merchant = Dialog(merchant,player)#call dialog class
while True:
merchant.update(space_key)
merchant.draw(screen)但它显示的第一个文本没有悬停在字符上,我知道问题是什么,但我找不到解决它的方法,我面临这个问题,因为self.step自动为0,你有什么想法来解决这个问题吗?
发布于 2021-10-15 21:10:50
可以这样做:
import pygame
pygame.init()
screen = pygame.display.set_mode((600, 500))
clock = pygame.time.Clock()
box = pygame.Rect(300, 200, 100, 100)
player = pygame.Rect(50, 50, 30, 30)
font = pygame.font.SysFont('Times New Roman', 50)
texts = ['Hi', 'Hello', 'Who are ye?', 'Someone']
text_renders = [font.render(text, True, (0, 0, 255)) for text in texts]
index = -1
space_released = True
while True:
clock.tick(60)
screen.fill((0, 0, 0))
keys = pygame.key.get_pressed()
if keys[pygame.K_a]:
player.x -= 3
if keys[pygame.K_d]:
player.x += 3
if keys[pygame.K_s]:
player.y += 3
if keys[pygame.K_w]:
player.y -= 3
pygame.draw.rect(screen, (0, 255, 0), box, width=2)
pygame.draw.rect(screen, (255, 0, 0), player)
if player.colliderect(box):
if keys[pygame.K_SPACE] and space_released:
space_released = False
index = (index + 1) if (index + 1) != len(text_renders) else 0
elif not keys[pygame.K_SPACE]:
space_released = True
else:
index = -1
if index != -1:
screen.blit(text_renders[index], (0, 0))
for event in pygame.event.get():
if event.type == pygame.QUIT:
exit()
pygame.display.update()您可以将索引初始设置为-1,如果索引位于该位置,则不显示文本,然后当您增加索引时,它将从0开始,您还需要在离开框时重新设置它,以便下一次它从开头开始(如果这是您需要的)
https://stackoverflow.com/questions/69589737
复制相似问题