• pygame简单动态图 & 动态图片的移动


              之前在学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 会更好。



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

  • 相关阅读:
    1.Lucene
    docker 安装常用服务
    docker 常用命令
    05-vue中使用样式
    04-vue的事件修饰符
    03-用基本指令实现跑马灯效果
    02-vue基本指令
    01-vue分层概念MVVM
    Redis-持久化机制
    BigDecimal工具类
  • 原文地址:https://www.cnblogs.com/Rex7/p/4752585.html
Copyright © 2020-2023  润新知