Python作业贴
网络上很多介绍subsurface()的使用方法, 但毕竟不是自己手动写的,看着难受
遂按照自己的理解重新写一遍
#! /usr/bin/python3
# @File: test4.py
# @Author: tiannanyihao
# @DATE: 2019-01-16
# @TIME: 10:13
# @Software: PyCharm
# @Production:
import pygame
class ImgGif(pygame.sprite.Sprite):
"""
创建精灵子类ImaGif
通过subsurface()方法遍历大图中的每一块小图,达到动画效果
需指定row/cloumn 行/列数
需要一张连续的主图 image_Real
要设置一个窗口图片 image
记录当前遍历的下标 index
记录上次遍历的下标 lastIndex
记录循环中,上一次tick时间增量的 lastTick
"""
def __init__(self, row, cloumn):
super().__init__()
self.index = 0
self.lastIndex = 0
self.lastTick = 0
self.row = row
self.cloumn = cloumn
self.allIndex = self.row * self.cloumn
self.image = pygame.image.load('../src/images/me1.png')
self.rect = self.image.get_rect()
self.image_Real = pygame.image.load("../src/images/me4.png")
def update(self, *args):
# 获取时间增量
currentTick = args[0]
# 判断当前时间增量是否大于上次时间增量
if currentTick > self.lastTick:
# 下标递增,当下标达到最大下标数,重置下标再次循环
self.index += 1
if self.index > self.allIndex - 1:
self.index = 0
self.lastTick = currentTick
# 检测是否是新下标
if self.index != self.lastIndex:
singleImg_X = (self.index // self.row) * self.rect.width
singleImg_Y = (self.index % self.row) * self.rect.height
singleRect = (singleImg_X, singleImg_Y, self.rect.width, self.rect.height)
# 替换当前应该展示的图片
self.image = self.image_Real.subsurface(singleRect)
self.lastIndex = self.index
pass
pygame.init()
screen = pygame.display.set_mode((900, 400))
clock = pygame.time.Clock()
imgSprite = ImgGif(1, 4)
spritesGroup = pygame.sprite.Group()
spritesGroup.add(imgSprite)
while True:
screen.fill((10, 110, 100))
for event in pygame.event.get():
pass
clock.tick(10)
ticks = pygame.time.get_ticks()
spritesGroup.update(ticks)
spritesGroup.draw(screen)
pygame.display.update()
纯粹记录,以供自己后期翻阅