python - Pygame : Two layered scrolling background, 你能帮我吗?

标签 python scroll pygame

我想创建一个两层滚动背景,但每次我运行下面的程序时,一切都会出错,我不知道为什么:/ 你能帮我吗?

我尝试了下面的代码:

'bg scrolling try'

import pygame as pg
from pygame.locals import *
pg.init()

screen = pg.display.set_mode((1920, 1080), pg.NOFRAME)
a = True
land_0 = pg.image.load('sprites/land_0.png').convert_alpha()
land_1 = pg.image.load('sprites/land_1.png').convert_alpha()
bg = pg.image.load('sprites/bg.png').convert_alpha()

pos_l0_0 = 2
pos_l0_1 = 1920
pos_l1_0 = -1000
pos_l1_1 = 920
hight_land = 500
hight_land_1 = 400
s_speed = 2
while a:
     screen.blit(bg,(0, 0))
     pos_l1_0 = pos_l1_0 - s_speed
     pos_l1_1 = pos_l1_1 - s_speed
     if pos_l1_0 == - 1920:
          pos_l1_0 = 1920
     elif pos_l1_1 == - 1920:
          pos_l1_0 = 1920
     screen.blit(land_1,(pos_l1_0, hight_land_1))
     screen.blit(land_1,(pos_l1_1, hight_land_1))

     # 2nd
     pos_l0_0 = pos_l0_0 - s_speed/2
     pos_l0_1 = pos_l0_1 - s_speed/2
     if pos_l0_0 == - 1920:
          pos_l0_0 = 1920
     elif pos_l0_1 == - 1920:
          pos_l0_0 = 1920
     screen.blit(land_0,(pos_l0_0, hight_land))
     screen.blit(land_0,(pos_l0_1, hight_land))
     pg.display.update()

我希望第一层快速滚动,第二层(在后台滚动缓慢),我在前 20 秒内工作得很好,但在此之后它是随机的:一层消失或一层正在位图传输,太奇怪了......

最佳答案

滚动的土地可以想象成一排无尽的瓷砖。如果你想在某个位置绘制背景,那么你必须通过取模(%)运算符来计算图 block 相对于屏幕的位置。第二部分图 block 的位置按陆地表面的宽度移动(例如land_0.get_width())。

这意味着为每个背景陆地定义 1 个位置(偏移)就足够了,因为第二个位置可以通过陆地的宽度来计算。

编写一个函数,将陆地移动一定的偏移量(速度),绘制陆地表面并返回新位置:

def drawLand(pos, height, speed, land):
    width = land.get_width()
    pos = (pos + speed) % width
    screen.blit(land, (pos, height))
    pos_2 = pos + width if pos < 0 else pos - width
    screen.blit(land, (pos_2, height))
    return pos

在应用程序的主循环中调用每个land的函数:

pos_l0, hight_land = 2, 500
pos_l1, hight_land_1 = -1000, 400
s_speed = 2
while a:

    # [...]

    screen.blit(bg,(0, 0))
    pos_l1 = drawLand(pos_l1, hight_land_1, -s_speed, land_1)
    pos_l0 = drawLand(pos_l0, hight_land, -s_speed // 2, land_0)
    pg.display.update()

关于python - Pygame : Two layered scrolling background, 你能帮我吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55454487/

相关文章:

python - 如何使用 Opengl 在 pygame 中制作可调整大小的窗口

python - 强化学习中的负奖励

python - 根据空格和标点符号进行标记,保留标点符号

python - 无法在 Seaborn stripplot 中使用 'x' 和 '+' 标记

python - 如何通过终端安装python模块?

android - 溢出滚动不适用于 Android 手机

javascript - 检测 "overflow: auto"是否正常(手机浏览器)

css - 如何使用 CSS 更改滚动条的背景?

python - 将文本添加到可以调整大小的矩形,并且无需插件即可在 Pygame 上移动

python - 如何在一个函数中休眠而不休眠整个程序