学了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后都会有很小的一段时间显示是空白。大家如果有好的方法希望不吝赐教。:)