之前在学pygame 时看了一些博客(来自http://eyehere.net/2011/python-pygame-novice-professional-plant-zombie-1/),觉得写得挺不错的,这篇博客写了 如何在pygame里制作动态效果。其中,用了植物大战僵尸的向日葵作为例子。这里有一个点,就是,他是用sprite的,而我的呢,是不用sprite,之所以要这样做,就是要看一下行不行,以及效果怎么样,然后,就是要了解一下原理。

          这里的素材来自http://www.easyicon.net/。我p了一张这样的图:



         代码是用python2.7.6和相应版本的pygame 写的,直接上代码:

# -*- coding: cp936 -*-
import os,sys,pygame
from pygame.locals import *
size=(600,580)     #对话框大小
white=(255,255,255) 

#游戏主角是机器人android
class Android():  
    def __init__(self,img,rect,speed):
        #full_img 是整张图,imgs 是full_img的surface 
        #rect 是机器人的位置,speed则是移动速度
        self.ful_img = img
        self.imgs = [self.ful_img.subsurface(Rect((i*64.5,0),(64.5,64)))
                         for i in xrange(11)]
        self.rect = rect
        self.speed = speed
        self.num = 0
    def update(self,screen,press_keys):
        #根据按下的方向键来移动机器人
        if press_keys[K_LEFT]:
            self.rect.left -= self.speed
            if self.rect.left <= 55:
                self.rect.left = 55
        if press_keys[K_RIGHT]:
            self.rect.left += self.speed
            if self.rect.right >= 545:                
                self.rect.right = 545
        if press_keys[K_UP]:
            self.rect.top -= self.speed
            if self.rect.top <= 2:
                  self.rect.top = 2
        if press_keys[K_DOWN]:
            self.rect.top += self.speed
            if self.rect.bottom >= 578:
                  self.rect.bottom = 578
        #num是surface的编号,根据编号来轮流显示surface
        self.num += 1
        if self.num%11 == 0:
            self.num = 0
        screen.blit(self.imgs[self.num],self.rect)
        return 0
def game():
    #使窗口居中
    os.environ['SDL_VIDEO_CENTERED'] = '1' 
    speed_android = 50
    dwTime = 6
    r_android = Rect(250,200,64.5,64)    
    pygame.init()    
    clock = pygame.time.Clock()
    screen = pygame.display.set_mode(size, 0, 32)
    android=pygame.image.load('11_androids.png').convert_alpha()
    #定义一个Android
    Andr = Android(android,r_android,speed_android)
    pygame.display.set_caption("Test")
    while True:
        screen.fill(white)
        for event in pygame.event.get():  
            if event.type == QUIT:  
                pygame.quit()
                sys.exit()
        press_keys=pygame.key.get_pressed()
        Andr.update(screen,press_keys) 
        pygame.display.update()
        clock.tick(dwTime)


if __name__ == "__main__":  
    game()  
                 运行,结果如图:


           动态效果出来了,移动方向键,就可以看到机器人移动了。不过,这里是看不到动态效果的,代码在这里下载 

http://download.csdn.net/detail/kamsau/6873565, 对了,这个链接里的代码有个bug ,要在前面添加


import sys
                不用sprite也是可以的,不过,可能在需要大量图片的情况下,sprite 会更好。



版权声明:本文为博主原创文章,未经博主允许不得转载。

 posted on 2014-01-22 13:39  Rex7  阅读(2147)  评论(0编辑  收藏  举报