首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pygame对话系统

Pygame对话系统
EN

Stack Overflow用户
提问于 2021-10-15 19:30:56
回答 1查看 216关注 0票数 1

我正试着用pygame做一个简单的对话系统。我有一个简单的对话框类。

代码语言:javascript
复制
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,你有什么想法来解决这个问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-15 21:10:50

可以这样做:

代码语言:javascript
复制
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开始,您还需要在离开框时重新设置它,以便下一次它从开头开始(如果这是您需要的)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69589737

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档