python - How to delay blits being iterated from a list -


i'm trying create typewriter effect text being blitted. typewriter effect, mean im trying avoid entirety of text being blitted on screen @ once. instead, im trying have each letter appear individually, slight delay before next character in string appears.

the catch im not using pygame's font.render. instead, i've made own custom fonts, each letter being saved separate image file. each alphanumeric character has it's own variable it's image attached , each appended list.

e.g:

    letter_imgs = []     = "a" == pygame.image.load("img/letter_a.gif)     letter_img.append(a) 

lower, have along these lines:

    letter_pos_x = 0     text = "hello"     i, c in enumerate(text):         screen.blit(letter_imgs[i], (letter_pos_x,0))         letter_pos_x += 20         scroll_wait  #this clock.delay variable. it's value set                      outside loop. i'm calling here.  

now you'd guess, result code entire line of text appears simultaneously after delay. i've been trying code needed there, of come returns "cannot iterate through surface objects" error.

i'm pretty @ loss on how should proceed next. note that, ive been learning bit of code on own, on , off, past year , don't know im doing yet. , appreciated.

thanks in advance time.

without getting pygame specifices much, need change iterator returns substrings rather letters:

def iterate_text(text):     r in range(len(text)):         yield text[:r + 1] 

which return substring iteratively:

for t in iterate_text('hello'):     print t  # h # # hel # hell # hello 

use separate function draw string:

def draw_text(x, y, text):     characters = [letter_imgs[t] t in text]     cursor = x     char in characters:         screen.blit(char, cursor, y)         cursor += 20 

in main loop can decide when next character. you'll like:

 typewriter = iter_text('hello world')  text_to_draw = none       advance_text = false 

at level outside loop survive frame frame. when want draw next character, set advance_text true, in , in main loop:

 if typewriter , advance_text:       text_to_draw = typewriter.next()       advance_text = false # until set again   if text_to_draw :      draw_text(0,0, draw_text) 

you can start on resetting typewriter new text, , control timing of new character appearing setting advance_text true before next frame


Popular posts from this blog