在Pygame中创建一个滚动的背景
在这篇文章中,我们将了解如何在Pygame中创建一个滚动的背景。
Pygame为开发许多游戏的基本基础设施提供了许多优势。其中之一就是滚动的背景。许多流行的游戏都需要这种无尽滚动的功能。这种滚动背景有助于以较少的精力使背景更具创造性。
在滚动的背景中,一张图片被认为是一个背景,它将一次又一次地重复。从而形成一个滚动的无尽的图像循环。假设在Pygame shell中,我们将一张图片从一个坐标移动到另一个坐标,从而将一张图片的像素移到另一张。现在,这些空白的像素可以由另一幅图像来填补。
必要的图书馆。
在命令提示符下运行以下命令来安装Pygame库。
pip install pygame
在Pygame中创建一个滚动的背景
我们想在Pygame中为我们的游戏创建一个滚动窗口,即卡通诗句中的一匹奔马。所以我们创建了一个图像作为背景。我们希望在马匹奔跑时,图像图1.1能出现在我们的画面中。简而言之,我们要为我们的游戏提供一个滚动的背景。
图1.1
滚动窗口
图. 1.2
Step Implementation:
第1步。导入所需的库和模块,并初始化声明的模块。
import pygame as py
import math
第二步。声明用于管理滚动速度的时钟。在Pygame中用于滚动背景图像的FrameHeight、FrameWidth和Frame window。
clock = py.time.Clock()
FrameHeight = 600
FrameWidth = 1200
# PYGAME FRAME WINDOW
py.display.set_caption("Endless Scrolling in pygame")
screen = py.display.set_mode((FrameWidth, FrameHeight))
第三步。上传用于滚动的背景图片,并将滚动变量设置为0。 并计算一个上传的图片在一个pygame框架中所需要的瓷砖或区域框的数量。
bg = py.image.load("sea7.png").convert()
# DEFINING MAIN VARIABLES IN SCROLLING
scroll = 0
# HERE 1 IS THE CONSTATNT FOR REMOVING BUFFERING
tiles = math.ceil(FrameWidth /bg.get_width()) + 1
第四步。调用pygame的时钟函数来管理窗口屏幕的帧数。使用blit函数(block transfer)这个函数帮助我们将图像从一个位置复制到另一个位置。这有助于我们将图像追加到图像的后面。
在一个条件中,如果滚动器的移动超过了框架宽度,那么就把滚动器的值修改为0。因此,它将帮助我们反复移动同一个框架,并创建一个无尽的滚动视图。
为了关闭pygame窗口,我们必须声明事件控制器,以获得用户的退出请求来结束pygame窗口。
while 1:
clock.tick(50)
# APPENDING THE IMAGE TO THE BACK OF THE SAME IMAGE
i=0
while(i<tiles):
screen.blit(bg, (bg.get_width()*i + scroll, 0))
i+=1
# FRAME FOR SCROLLING
scroll -= 6
# RESET THE SCROLL FRAME
if abs(scroll) > bg.get_width():
scroll = 0
# CLOSING THE FRAME OF SCROLLING
for event in py.event.get():
if event.type == py.QUIT:
quit()
py.display.update()
py.quit()
代码实现:
import math
import pygame as py
py.init()
clock = py.time.Clock()
FrameHeight = 600
FrameWidth = 1200
# PYGAME FRAME WINDOW
py.display.set_caption("Endless Scrolling in pygame")
screen = py.display.set_mode((FrameWidth,
FrameHeight))
# IMAGE
bg = py.image.load("sea6.png").convert()
# DEFINING MAIN VARIABLES IN SCROLLING
scroll = 0
# CHANGE THE BELOW 1 TO UPPER NUMBER IF
# YOU GET BUFFERING OF THE IMAGE
# HERE 1 IS THE CONSTATNT FOR REMOVING BUFFERING
tiles = math.ceil(FrameWidth / bg.get_width()) + 1
# MAIN LOOP
while 1:
# THIS WILL MANAGE THE SPEED OF
# THE SCROLLING IN PYGAME
clock.tick(33)
# APPENDING THE IMAGE TO THE BACK
# OF THE SAME IMAGE
i = 0
while(i < tiles):
screen.blit(bg, (bg.get_width()*i
+ scroll, 0))
i += 1
# FRAME FOR SCROLLING
scroll -= 6
# RESET THE SCROLL FRAME
if abs(scroll) > bg.get_width():
scroll = 0
# CLOSINF THE FRAME OF SCROLLING
for event in py.event.get():
if event.type == py.QUIT:
quit()
py.display.update()
py.quit()
输出:
图1.3 最终输出