问题描述
所以我有这段代码可以创建一种无限滚动背景。背景是一排单一的红色和绿色方块。为了创建这种无限滚动效果,我重复使用了背景“图像”3 次,分别是中间背景“图像”的左侧和右侧。每当相机到达边界时,位置都会更新,以便将中间背景设置为相机位置。对不起,如果我没有很好地解释这一点,但这里是代码。
settings.py
import pygame
import os
WIDTH = 1024
HEIGHT = 640
WIN = pygame.display.set_mode((WIDTH,HEIGHT))
pygame.display.set_caption("Lol")
FPS = 60
WHITE = (255,255,255)
BLACK = (0,0)
RED = (255,0)
GREEN = (0,0)
CLOCK = pygame.time.Clock()
TILEWH = 32
main.py
import pygame
from settings import *
pygame.init()
class Background:
def __init__(self):
self.init_background()
def init_background(self):
self.background = pygame.Surface((WIDTH,HEIGHT))
for x in range(0,WIDTH,64):
pygame.draw.rect(self.background,RED,pygame.Rect(x,TILEWH,TILEWH))
for x in range(0+TILEWH,GREEN,TILEWH))
self.bgXY_1 = [0-self.background.get_width(),0]
self.bgXY_2 = [0,0]
self.bgXY_3 = [self.background.get_width(),0]
self.bg = [self.bgXY_1,self.bgXY_2,self.bgXY_3]
class Game:
def __init__(self):
self.running = True
self.camera = 0
self.offset = 0
self.grid_start_red = True
self.direction = None
self.background = Background()
self.run()
def run(self):
while self.running:
CLOCK.tick(FPS)
for event in pygame.event.get():
if event.type == pygame.QUIT:
self.running = False
pygame.quit()
keys_pressed = pygame.key.get_pressed()
self.handle_movement(keys_pressed)
self.draw()
def handle_movement(self,keys_pressed):
if keys_pressed[pygame.K_a]:
self.camera-=4
if self.camera % 1024 == 0:
for background_item in self.background.bg:
background_item[0]-=1024
if keys_pressed[pygame.K_d]:
self.camera+=4
if self.camera % 1024 == 0:
for background_item in self.background.bg:
background_item[0]+=1024
def draw(self):
WIN.fill(WHITE)
WIN.blit(self.background.background,(self.background.bgXY_1[0]-self.camera,self.background.bgXY_1[1]))
WIN.blit(self.background.background,(self.background.bgXY_2[0]-self.camera,self.background.bgXY_2[1]))
WIN.blit(self.background.background,(self.background.bgXY_3[0]-self.camera,self.background.bgXY_3[1]))
pygame.display.update()
main = Game()
A 和 D 键用于“移动” 为什么红绿方块移动时会出现黑线?这是由于硬件限制吗?有没有更好的方法来达到同样的效果?请让我知道! :)
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)