如何阻止 .blit() 在屏幕上包裹像素,或帮助找到具有相同功能的替代方案?

问题描述 投票:0回答:1

我正在尝试随机生成地形,并且我已将其滚动作为测试,但是当像素到达屏幕末端时,它们会在另一侧回放,如下所示:brokenscroll在到达另一侧之前看起来像:scrolling

这是我的代码:

import numpy as n
import pygame as py
import random as r
import time as t
import math as m
py.init()
left = 0
Ylev = 8
display = py.display.set_mode((512, 512))
display.fill((175, 215, 225))
def scrollX(screenSurf, offsetX):
    width, height = screenSurf.get_size()
    copySurf = screenSurf.copy()
    screenSurf.blit(copySurf, (offsetX, 0))
    if offsetX < 0:
        screenSurf.blit(copySurf, (width + offsetX, 0), (0, 0, -offsetX, height))
    else:
        screenSurf.blit(copySurf, (0, 0), (width - offsetX, 0, offsetX, height))
while True:
    num = round(r.randint(0, 5) ** 1/4)
    neg = r.randint(0, 1)
    if neg == 0:
        num = -num
    Ylev += num
    if Ylev < 0:
        Ylev = 0
    if Ylev > 16:
        Ylev = 15
    print(Ylev)
    scrollX(display, -16)
    py.draw.rect(display, (0, 100, 20), py.Rect(31 * 16, Ylev * 16, 16, 16))
    py.display.flip()
    t.sleep(0.25)

我正在尝试实现图像 2,但能够击中屏幕的另一侧并仍然生成新地形。如何实现这一点,如果可能的话,如何允许玩家(由 2 个像素表示)以移动的形式与该地形进行交互,但不允许通过生成的地形进行移动。这可以通过检测像素(例如地形)的颜色并让玩家与其交互来实现,还是我需要所有地形像素的列表?

我尝试更新除第一行之外的所有内容,但是 1. 这会导致第一个像素永远不会被显示,并且 2. 这并不能解决问题。

python random pygame interactive procedural-generation
1个回答
0
投票

所有问题都在

if offsetX < 0:
内部 - 您从
left side
复制到
right side
,这会添加旧像素。

你应该使用背景颜色

fill()

if offsetX < 0:
    screenSurf.fill((175, 215, 225), (width + offsetX, 0, width, height))
else:
    screenSurf.fill((175, 215, 225), (0, 0, offsetX, height))
© www.soinside.com 2019 - 2024. All rights reserved.