pygame制作的一个图片滚动

学了python有一个月,想拿些简单的小项目来练练手,觉得pygame是一个很有意思的东西,就装了pygame来写点小玩意。图片滚动是在网页设计里面比较基础的东西,网上的js实现基本上都是那一个算法,我这里的算法实现也是参照的它。

算法描述

首先生成一个列表将所需要图片对象都装在里面,通过动态改变第一张图片的位置坐标(x1, y1)来实现按照列表中元素的顺序图片无限循环滚动。每当列表中的一张图片左滑至完全消失,将其加至列表的末尾。

代码实现

# -*- coding:utf-8 -*-

import pygame
from pygame.locals import *
from sys import exit

pygame.init()
# 初始化pygame对象
screen = pygame.display.set_mode((400, 250), 0, 24)
# 设置显示的屏幕的模式和像素大小

image1_filename = 'img/1.bmp'
image2_filename = 'img/2.bmp'
image3_filename = 'img/3.bmp'
# 对于所需要的背景图命名

bgimage1 = pygame.image.load(image1_filename).convert()
bgimage2 = pygame.image.load(image2_filename).convert()
bgimage3 = pygame.image.load(image3_filename).convert()
# 将三张背景图片都加载和转化
bgimage = [bgimage1, bgimage2, bgimage3]
# 生成一个image列表,后面将列表所有元素的同时向前移动一位会用到

x1, y1 = 0, 0
# 给出第一张背景图左上角的坐标

while True:
    for event in pygame.event.get():
        if event.type == QUIT:
            exit()
    # 事件捕捉使得用户退出程序

    x1 -= 2 #通过改变数值能够改变滑动的速度
    if x1 <= -400:
        bgimage = bgimage[1:]+bgimage[:1]
        # 每当列表中的第一张图片左移动至完全消失的时候,将第一张图片加到列表的末尾
        bgimage1, bgimage2, bgimage3 = bgimage
        x1 = 0
    # 图片水平滑动的算法

    screen.blit(bgimage1, (x1, y1))
    screen.blit(bgimage2, (x1+400, y1))
    screen.blit(bgimage3, (x1+800, y1))
    # 把三张背景图依次画到屏幕上

    pygame.display.update() 
    # 使得pygame对象不断刷新

但是代码还是有bug的,pygame中图片显示依靠的是所有的pygame.display 对象不断刷新然后再blit()在屏幕上的,从执行图片滑动算法到图片执行update()是有时间差的,每张图片滑过一个width后都会有很小的一段时间显示是空白。大家如果有好的方法希望不吝赐教。:)

pygame制作的一个图片滚动_第1张图片

你可能感兴趣的:(python,python,pygame)