python一次显示一个字符

时间:2014-03-06 10:25:36

标签: python pygame

所以我正在重新创建口袋妖怪黄色的一部分(尽量使它尽可能接近原始)并且我正在寻找一种智能且有效的方式来渲染并在一个字符串中显示一个字符串在文本框中的时间,就像口袋妖怪游戏一样!(顺便说一下,我正在使用pygame和python)。有谁知道实现这一目标的任何方式?我尝试了很多东西,但是当一次渲染一个角色时,它们之间总是有足够的空间。 抱歉,这个问题很长! 干杯, 亚历

(编辑)感谢您的兴趣! 我不知道我是否知道在这里显示我的代码的正确方法,如果我应该 复制粘贴在这里或上传到Dropbox或其他地方..

(edit2)为了澄清,我使用28号字体,所以我现在尝试渲染字符的方式是制作一个列表,其中每个元素都有格式(character_to_render,x_pos_to_render,y_pos_to_render) 。下一个字符是(character2_to_render, x_pos_to_render + 28 ,y_pos_to_render)。但是以这种方式解决问题,在某些角色之间留下了不足的空间,其他一些角色也没问题。

(编辑3):谢谢你们的所有答案!在仔细观察模拟器后,我注意到渲染字符之间的间距不足也很明显!所以我会忽略这个问题Andover on my project !!干杯,祝你有个愉快的一天!

1 个答案:

答案 0 :(得分:1)

好的,所以这是迄今为止我提出的最佳解决方案。

您希望能够显示字符串,但您只想一次执行一个字符。使用字符串,您可以执行类似string[0:len(string)]的操作,它将返回整个字符串。所以我在想什么,如果我错了请纠正我,但是说你降低FPS几秒钟,或者如果你不想这样做,因为你仍然想接受用户输入来跳过文本。

所以你有了你的while循环,并检查是否正在显示文本。如果是,则要向显示在屏幕上的字符串添加新字母。我建议使用一个类来显示屏幕上显示的文本。

surf = pygame.Surface(80, 80)
Text = TextBoxString("Hello World")
font = pygame.font.SysFont("Arial", 18)
while true:
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            exit()
        elif event.type == MOUSEBUTTONUP:
            Text.showAll()
    surf.fill((0,0,0))
    text = font.render(Text.currentString, (0,0,0))
    surf.blit(text, (0,0))
    Text.addOn()


class TextBoxString:
    def __init__(self, string):
        #string that you will be dealing with
        self.totalString = string
        self.currentString = string[0]
        #how many characters you want shown to the screen
        self.length = 0
        #this means that every four times through your 
        #while loop a new char is displayed
        self.speed = 4
    def addOn(self) #adds one to the loop num and then checks if the loop num equals the speed
        self.loopNum += 1
        if self.loopNum == self.speed:
            self.length += 1
            self.loopNum=0
        self.currentString = totalString[0: self.length]
    def showAll(self):
        self.length = len(self.totalString)
        self.currentString = [0: self.length]