2010-07-27 13 views
0

Je suis en train de créer une fonction en utilisant pygame qui dessine un message à l'écran, en ajoutant un caractère à chaque image (La chasse au rouge Octobre). Je sais que je pourrais simplement copier (ou passer) des tranches progressivement plus grandes de la chaîne d'origine, mais je sais que cela nécessiterait beaucoup de ressources. Y a-t-il une meilleure manière de faire cela?Un moyen efficace d'ajouter un caractère à la fois d'une chaîne à l'autre en Python

code, en utilisant de plus grandes tranches progressivement:

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 
+2

nous montrer votre code – SilentGhost

Répondre

4

Dans un endroit où vous êtes volontairement ralentir le jeu (pour le fondu dans le texte) - est-ce vraiment? Vous pouvez passer la chaîne entière et modifier la routine d'affichage pour afficher une lettre de plus dans chaque image.

+0

Le framerate que je passe à 'pygame.clock.tick' est le même 60 que je passe dans la boucle principale du jeu. Le texte n'est pas "effacé"; il est censé ressembler à une saisie (soit par un clavier, soit par un terminal lent). En fait, il se peut que je doive réellement ** augmenter ** le débit d'images pour ce segment si je trouve qu'il faut une éternité pour les longs messages à taper - même si je ne suis pas sûr du nombre d'ordinateurs capables de le gérer. Je suppose que si je supposais qu'il n'y aurait aucune manipulation de fenêtre, alors je pourrais simplement vider la surface une fois. – mmirate

-1

Vous pouvez accéder à un seul caractère d'une chaîne à l'aide des index:

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

Impossible vous imprimer uniquement les caractères un à la fois déplacé sans effacer l'arrière-plan? Vous pouvez obtenir le personnage en utilisant le découpage.

+0

Eh bien, je ne peux pas juste distribuer Courier avec le programme, et sans avoir une police connue pour travailler, je ne sais pas combien de pixels de large ou de grande taille il est. – mmirate

+0

L'objet 'Font' peut vous dire que http://www.pygame.org/docs/ref/font.html#pygame.font.Font. En outre, vous pouvez distribuer une feuille de caractères dans une police personnalisée avec votre jeu. Beaucoup d'entre eux le font. Lisez-le dans une feuille de sprite et de les rendre sur l'écran plutôt que des polices. –

1

En supposant que vous avez un objet disponible screen, cela pourrait fonctionner:

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) 
+0

J'utilise déjà 'pygame.clock' pour le timing (' clock.tick (framespersecond) 'pour être exact). – mmirate

+0

Ok, vous avez ajouté le code après ma réponse –