"""
中途岛海战淡入淡出的云彩类测试程序,本程序还有待改进,留此版本以做纪念.
"""
__author__ = "李兴球"
__date__ = "2019/9/9"
import pygame
from pygame.locals import *
from random import randint
class Cloud(pygame.sprite.Sprite):
"""从上到下移动淡入淡出的云彩类"""
def __init__(self,images,screen):
"""
images:越来越透明的每像素图形,screen:屏幕
"""
pygame.sprite.Sprite.__init__(self)
self.images = images
self.amounts = len(images) # 造型数量
self.sw = screen.get_width()
self.sh = screen.get_height()
self.index = 0
self.image = images[0] # 最透明的图
self.rect = self.image.get_rect()
self.rect.centerx = randint(0,self.sw)
self.rect.bottom = 0
def update(self):
"""更新坐标与造型"""
self.rect.move_ip(0,1)
if self.rect.centery < self.sh: # 没到最下边
if self.index < self.amounts-1:
self.index += 1
self.image = self.images[self.index]
else:
if self.index > 0:
self.index -= 1
self.image = self.images[self.index]
else:
self.kill()
def main():
width,height = 960,720
screen = pygame.display.set_mode((width,height),0,32)
image = pygame.image.load('images/Cloud2.png').convert_alpha()
images = [image.copy() for _ in range(16)]
alphas = [pygame.surfarray.pixels_alpha(image) for image in images]
for index in range(0,16):
print(index * 16)
alphas[index][:] = index * 16
del alphas
for image in images:
pxarray = pygame.PixelArray(image)
pxarray.replace(268435456,0)
pxarray.replace(536870912,0)
pxarray.replace(805306368,0)
pxarray.replace(1073741824,0)
pxarray.replace(1342177280,0)
pxarray.replace(1610612736,0)
pxarray.replace(1879048192,0)
pxarray.replace(-2147483648,0)
pxarray.replace(-1879048192,0)
pxarray.replace(-1610612736,0)
pxarray.replace(-1342177280,0)
pxarray.replace(-1073741824,0)
pxarray.replace(-805306368,0)
pxarray.replace(-536870912,0)
pxarray.replace(-268435456,0)
pxarray.close()
cloud = Cloud(images,screen)
cloud_group = pygame.sprite.Group()
pygame.time.set_timer(USEREVENT,1000) # 1秒产生一片云朵
clock = pygame.time.Clock()
running = True
while running:
for event in pygame.event.get():
if event.type == QUIT:running = False
if event.type == USEREVENT:
cloud_group.add(Cloud(images,screen))
cloud_group.update()
screen.fill((90,120,0))
cloud_group.draw(screen)
pygame.display.update()
clock.tick(60)
pygame.quit()
if __name__== "__main__":
main()