我正在尝试随机生成地形,并且我已将其滚动作为测试,但是当像素到达屏幕末端时,它们会在另一侧回放,如下所示:在到达另一侧之前看起来像:
这是我的代码:
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. 这并不能解决问题。
所有问题都在
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))