首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

请教怎么把这样动态的方块改成动态text字

2012-03-09 
请问如何把这样动态的方块改成动态text字想把这三个移动的方块改成两个分别移动的英文,比如HELLO和WORLD,

请问如何把这样动态的方块改成动态text字


想把这三个移动的方块改成两个分别移动的英文,比如HELLO和WORLD,请问怎么改?

编码是这样的:

Python code
import pygame, sys, timefrom pygame.locals import *# set up pygamepygame.init()# set up the windowWINDOWWIDTH = 400WINDOWHEIGHT = 400windowSurface = pygame.display.set_mode((WINDOWWIDTH, WINDOWHEIGHT), 0, 32)pygame.display.set_caption('Animation')# set up direction variablesDOWNLEFT = 1DOWNRIGHT = 3UPLEFT = 7UPRIGHT = 9MOVESPEED = 4# set up the colorsBLACK = (0, 0, 0)RED = (255, 0, 0)GREEN = (0, 255, 0)BLUE = (0, 0, 255)# set up the block data structureb1 = {'rect':pygame.Rect(300, 80, 50, 100), 'color':RED, 'dir':UPRIGHT}b2 = {'rect':pygame.Rect(200, 200, 20, 20), 'color':GREEN, 'dir':UPLEFT}b3 = {'rect':pygame.Rect(100, 150, 60, 60), 'color':BLUE, 'dir':DOWNLEFT}blocks = [b1, b2, b3]# run the game loopwhile True:    # check for the QUIT event    for event in pygame.event.get():        if event.type == QUIT:            pygame.quit()            sys.exit()    # draw the black background onto the surface    windowSurface.fill(BLACK)    for b in blocks:        # move the block data structure        if b['dir'] == DOWNLEFT:            b['rect'].left -= MOVESPEED            b['rect'].top += MOVESPEED        if b['dir'] == DOWNRIGHT:            b['rect'].left += MOVESPEED            b['rect'].top += MOVESPEED        if b['dir'] == UPLEFT:            b['rect'].left -= MOVESPEED            b['rect'].top -= MOVESPEED        if b['dir'] == UPRIGHT:            b['rect'].left += MOVESPEED            b['rect'].top -= MOVESPEED        # check if the block has move out of the window        if b['rect'].top < 0:            # block has moved past the top            if b['dir'] == UPLEFT:                b['dir'] = DOWNLEFT            if b['dir'] == UPRIGHT:                b['dir'] = DOWNRIGHT        if b['rect'].bottom > WINDOWHEIGHT:            # block has moved past the bottom            if b['dir'] == DOWNLEFT:                b['dir'] = UPLEFT            if b['dir'] == DOWNRIGHT:                b['dir'] = UPRIGHT        if b['rect'].left < 0:            # block has moved past the left side            if b['dir'] == DOWNLEFT:                b['dir'] = DOWNRIGHT            if b['dir'] == UPLEFT:                b['dir'] = UPRIGHT        if b['rect'].right > WINDOWWIDTH:            # block has moved past the right side            if b['dir'] == DOWNRIGHT:                b['dir'] = DOWNLEFT            if b['dir'] == UPRIGHT:                b['dir'] = UPLEFT        # draw the block onto the surface        pygame.draw.rect(windowSurface, b['color'], b['rect'])    # draw the window onto the screen    pygame.display.update()    time.sleep(0.02)



是不是要改这一部分呢?

Python code
# set up the block data structureb1 = {'rect':pygame.Rect(300, 80, 50, 100), 'color':RED, 'dir':UPRIGHT}b2 = {'rect':pygame.Rect(200, 200, 20, 20), 'color':GREEN, 'dir':UPLEFT}b3 = {'rect':pygame.Rect(100, 150, 60, 60), 'color':BLUE, 'dir':DOWNLEFT}blocks = [b1, b2, b3]



可是要怎么改呢?
我乱写了一通,都不行,麻烦高手帮忙啦~~~ 



[解决办法]
不过前面那个碰撞效果不太好,因为是按照rect碰撞的,但是rect和文字大小不一致。
可以把rect修正为和文字一样大小:
Python code
# set up the block data structurefont = pygame.font.SysFont(pygame.font.get_default_font(), 32)b1 = {'text':font.render('A', 1, RED),   'rect':pygame.Rect(300, 80, 50, 100), 'dir':UPRIGHT}b2 = {'text':font.render('B', 1, GREEN), 'rect':pygame.Rect(200, 200, 20, 20), 'dir':UPLEFT}b3 = {'text':font.render('C', 1, BLUE),  'rect':pygame.Rect(100, 150, 60, 60), 'dir':DOWNLEFT}blocks = [b1, b2, b3]for b in blocks:    b['rect'].width = b['text'].get_width()    b['rect'].height = b['text'].get_height() 

热点排行