Эффективный способ добавления одного символа за раз из одной строки в другую в Python - PullRequest
0 голосов
/ 27 июля 2010

В настоящее время я делаю функцию с использованием pygame, которая рисует сообщение на экране, добавляя один символ в каждом кадре (т.е. Охота за красным октябрем ). Я знаю, что могу просто скопировать (или передать) постепенно большие фрагменты из исходной строки, но я знаю, что это будет очень ресурсоемким. Есть ли лучший способ сделать это?

Код, используя постепенно увеличивающиеся кусочки:

def full_screen_dialog_tt(thesurface, thefont, theclock, message, thebeep):
 i = 0
 while(i < len(message)): # Initialize the string display
  theclock.tick(60)
  thesurface.fill((0, 0, 0))
  thesurface.blit(thefont.render(message[i]+"_"))
  pygame.display.flip()
  thebeep.play()
 while(1): # Whole string is here now
  theclock.tick(60)
  for event in pygame.events.get():
   if event.type == MOUSEBUTTONDOWN: return

Ответы [ 4 ]

4 голосов
/ 27 июля 2010

В месте, где вы намеренно замедляете игру (для появления текста) - это действительно имеет значение? Вы можете передать всю строку и изменить процедуру отображения, чтобы отображать еще одну букву в каждом кадре.

1 голос
/ 27 июля 2010

Если у вас есть объект screen, это может сработать:

import time
text = 'The Hunt for Red October'
myfont = pygame.font.SysFont("arial", 16)
for index, ch in enumerate(text): 
    letter = myfont.render(ch, True, (0, 0, 0), (255, 255, 255))
    screen.blit(letter, (index * 20, 20))
    time.sleep(1)
1 голос
/ 27 июля 2010

Разве вы не можете просто печатать символы поочередно без смещения фона?Вы можете получить персонажа, используя нарезку.

0 голосов
/ 27 июля 2010

Вы можете получить доступ к одному символу из строки, используя индексы:

>>> s = 'string'
>>> s[2]
'r'
...