86.动画精灵

简介: 86.动画精灵




import pygame
import sys   # 退出游戏需要
from pygame.locals import *  # 把pygame的常量名导进去
from random import *  # 随机生成数需要
class Ball(pygame.sprite.Sprite):  # 定义一个球类,继承动画精灵基类
    def __init__(self, image, position, speed, bg_size):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.image.load(image).convert_alpha()   # 加载图像
        self.rect = self.image.get_rect()                 # 获取图像矩形
        self.rect.left, self.rect.top = position          # 获取图像位置
        self.speed = speed                                # 速度
        self.width, self.height = bg_size[0], bg_size[1]  # 窗口宽高
    def move(self):
        self.rect = self.rect.move(self.speed)   # 移动球所在矩形
        """实现小球从某侧出界,从对侧进来"""
        if self.rect.right < 0:            # 小球右边小于左边窗口边界,即从右边出去了
            self.rect.left = self.width    # 屏幕左边出来
        elif self.rect.left > self.width:  # 小球左边大于右边窗口边界,即从左边出去了
            self.rect.right = 0            # 屏幕右边出来
        elif self.rect.bottom < 0:         # 小球底部坐标小于0,即从上边出去了
            self.rect.top = self.height    # 屏幕下边出来
        elif self.rect.top > self.height:  # 小球顶部坐标大于屏幕高,即从下边出去了
            self.rect.bottom = 0           # 屏幕上边出来
def main():         # 主函数
    pygame.init()   # 初始化
    ball_image = "gray_ball.png"   # 灰球图像
    bg_image = "background.png"    # 背景图片,图片上有五个黑球
    running = True  # 初试running为True
    bg_size = width, height = 1024, 681        # 窗口尺寸,也是背景的尺寸大小
    screen = pygame.display.set_mode(bg_size)  # 绘制窗口
    pygame.display.set_caption("玩个球")        # 窗口名
    background = pygame.image.load(bg_image).convert_alpha()  # 加载背景图片进去
    balls = []   # 球列表,初始空列表
    for i in range(5):  # 遍历0到4
        # position = (left, top)   左边和上边的坐标
        position = randint(0, width-100), randint(0, height-100)   # 随机生成球的坐标,球大小是100×100
        speed = [randint(-10, 10), randint(-10, 10)]               # 球速度随机-10到10
        ball = Ball(ball_image, position, speed, bg_size)          # 实例化上面的Ball类
        balls.append(ball)        # 添加球到球列表
    clock = pygame.time.Clock()   # 设置帧率需要用到
    while running:   # 主循环
        for event in pygame.event.get():  # 遍历事件
            if event.type == QUIT:        # ×掉窗口
                sys.exit()                # 退出游戏
        screen.blit(background, (0, 0))   # 更新图像和位置
        for each in balls:    # 遍历球类里面的各个球
            each.move()       # 各自移动
            screen.blit(each.image, each.rect)  # 更新每个球和球矩形位置
        pygame.display.flip()  # 刷新界面
        clock.tick(30)
if __name__ == "__main__":
    main()


效果图



参考博客


博客一


博客二


博客三


博客四

目录
相关文章
Threejs使用精灵Sprite作为标签,鼠标悬浮精灵上时鼠变小手
Threejs使用精灵Sprite作为标签,鼠标悬浮精灵上时鼠变小手
1563 0
Threejs使用精灵Sprite作为标签,鼠标悬浮精灵上时鼠变小手
|
12天前
|
前端开发
Filp动画
Filp动画基于First、Last、Inverse、Play四步实现复杂前端动画效果。首先记录元素初始位置,接着记录目标位置,然后使用transform属性将元素逆向平移回初始位置,最后通过移除transform并添加transition属性实现平滑动画效果。这是一种高效解决CSS不支持过渡动画问题的方法。
29 1
|
2月前
|
JavaScript 开发者
HarmonyNext动画大全03-帧动画
HarmonyNext动画大全03-帧动画
25 2
An动画基础之元件的图形动画与按钮动画
An动画基础之元件的图形动画与按钮动画
335 0
An动画基础之元件的图形动画与按钮动画
|
存储 文件存储 云计算
不瞒了,我们和追光动画有一个《杨戬》!
不瞒了,我们和追光动画有一个《杨戬》!
194 0
|
前端开发
动画
动画
144 0
|
存储 图形学
动画系统中的基础动画
动画系统中的基础动画
176 0
动画系统中的基础动画
|
前端开发 图形学 Python
动画系统之2D动画
动画系统之2D动画
184 0
动画系统之2D动画