Pygame对话系统

2024-09-30 06:23:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在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,你有什么办法解决这个问题吗


Tags: keytextselfifdefstepmerchantupdate
1条回答
网友
1楼 · 发布于 2024-09-30 06:23:20

可以这样做:

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开始,您还需要在离开该框时重置它,以便下次它从开头开始(如果您需要的话)

相关问题 更多 >

    热门问题