1. 程式人生 > 實用技巧 >pygame動畫例項--吃蘋果

pygame動畫例項--吃蘋果

原文出處:https://www.cnblogs.com/msxh/p/5027688.html

我稍作修改

import pygame,os,random
pygame.init()

os.environ['SDL_VIDEO_CENTERED'] = '1'
screen = pygame.display.set_mode((800,600))
pygame.display.set_caption("吃蘋果")
clock = pygame.time.Clock()

class renwu(pygame.sprite.Sprite):#人物精靈
    def __init__(self):
        super().
__init__() self.master_image = pygame.image.load('farmer walk.png').convert_alpha() # 匯入人物動畫完整影象 self.rect=self.master_image.get_rect() self.frame_width=self.rect.width//8 #整個影象分層8行--就是每個畫面的寬 self.frame_height =self.rect.height//8 #整個影象分層8列--就是每個畫面的高 self.image = self.master_image.subsurface((0,2*self.frame_height,self.frame_width,self.frame_height))
#初始動作向右-2行0列的動作 #每幀畫面 self.mask=pygame.mask.from_surface(self.image) self.x=0 #x軸每次移動量 self.y = 0 # y軸每次移動量 self.han = 2 # 記錄行 self.lie = 0 # 記錄列 self.li=0 #列偏移量 def update(self): # 更新函式 self.rect.x =self.rect.x+self.x self.rect.y
= self.rect.y + self.y #更新人物座標 if self.rect.x<-30 : self.rect.x=-30 if self.rect.x>750: self.rect.x = 750 if self.rect.y<0 : self.rect.y=0 if self.rect.y>530: self.rect.y = 530 #防止人物走出螢幕 self.lie+=self.li if self.lie>7: self.lie=0 self.image = self.master_image.subsurface((self.lie*self.frame_width, self.han * self.frame_height, self.frame_width, self.frame_height)) class pinguo(pygame.sprite.Sprite): #蘋果精靈 def __init__(self): super().__init__() self.image = pygame.image.load('food_low.png').convert_alpha() self.rect=self.image.get_rect() self.mask=pygame.mask.from_surface(self.image) p_zu = pygame.sprite.Group() #蘋果組 r_zu=pygame.sprite.Group() #人物組 for i in range(0,50): #隨機座標產生50個蘋果 p=pinguo() p.rect.x=random.randint(20,760) p.rect.y = random.randint(80, 560) p_zu.add(p) r=renwu() #產生人物精靈 r_zu.add(r) while True: for event in pygame.event.get(): if event.type == pygame.QUIT: exit() if event.type == pygame.KEYDOWN: if event.key == pygame.K_UP: # 如果按下是向上鍵 r.han=0 #第0行向上 r.y=-5 r.li=1 if event.key == pygame.K_LEFT: # 如果按下是向左鍵 r.han=6 #第6行向左 r.x=-5 r.li = 1 if event.key == pygame.K_DOWN: # 如果按下是向下鍵 r.han=4 #第4行向下 r.y=5 r.li = 1 if event.key == pygame.K_RIGHT: # 如果按下是向右鍵 r.han=2 #第2行向右 r.x=5 r.li = 1 elif event.type == pygame.KEYUP: # 如果有鍵盤釋放 if event.key == pygame.K_UP: # 如果釋放的是向上鍵 r.y=0 r.li = 0 if event.key == pygame.K_LEFT: # 如果釋放的是向左鍵 r.x=0 r.li = 0 if event.key == pygame.K_DOWN: # 如果釋放的是向下鍵 r.y = 0 r.li = 0 if event.key == pygame.K_RIGHT: # 如果釋放的是向右鍵 r.x = 0 r.li = 0 b = pygame.sprite.spritecollide(r, p_zu, True, pygame.sprite.collide_mask) # 精靈和組之間精準碰撞檢測 screen.fill((255,255,255)) r_zu.update() # 執行人物精靈的更新函式 p_zu.draw(screen) r_zu.draw(screen) clock.tick(30) pygame.display.update()
farmer walk.png圖片:

food_low.png圖片: