Python 为什么红色和绿色方块之间会出现黑线;“移动”;

Python 为什么红色和绿色方块之间会出现黑线;“移动”;,python,pygame,Python,Pygame,我有一段代码,它创建了一种infinte滚动背景。背景是一排红色和绿色的正方形。为了创建这种infinte滚动效果,我重复使用了背景“image”3次,中间背景“image”的左右两侧。每当摄影机到达边界时,位置都会更新,以便将中间背景设置为摄影机位置。对不起,如果我没有解释清楚,但这是代码 设置.py import pygame import os WIDTH = 1024 HEIGHT = 640 WIN = pygame.display.set_mode((WIDTH, HEIGHT

我有一段代码,它创建了一种infinte滚动背景。背景是一排红色和绿色的正方形。为了创建这种infinte滚动效果,我重复使用了背景“image”3次,中间背景“image”的左右两侧。每当摄影机到达边界时,位置都会更新,以便将中间背景设置为摄影机位置。对不起,如果我没有解释清楚,但这是代码

设置.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,0)
RED = (255, 0,0)
GREEN = (0,255,0)

CLOCK = pygame.time.Clock()
TILEWH = 32
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, 0,TILEWH,TILEWH))
        for x in range(0+TILEWH, WIDTH, 64):
            pygame.draw.rect(self.background, GREEN, pygame.Rect(x, 0,TILEWH,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()
main.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,0)
RED = (255, 0,0)
GREEN = (0,255,0)

CLOCK = pygame.time.Clock()
TILEWH = 32
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, 0,TILEWH,TILEWH))
        for x in range(0+TILEWH, WIDTH, 64):
            pygame.draw.rect(self.background, GREEN, pygame.Rect(x, 0,TILEWH,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键用于“移动”
为什么红色和绿色方块移动时会出现黑线?这是因为硬件限制吗?有没有更好的方法来达到同样的效果?请让我知道!:)

我仔细看了看,好像有黑线,但当我再仔细看时,一切似乎都很好,而且这些线实际上是淡黄色的,我想这只是一种视觉错觉你好,谢谢你的回答,我刚刚意识到我输入了错误的代码,self.camera应该更新4或-4(显然取决于移动的方向,因此self.camera+=4等等)。进行此更改时,黑线会更加明显。作为一个完美主义者,这真的很困扰我,事实上相机更新的次数越高,黑线就越大。我相信我能以更好的方式达到这个效果,实际上对我来说效果似乎有所减弱,但仔细观察后,我发现黄线变大了一点(可能这取决于屏幕),但我不知道如何减小,除非你可以创建一个图像(.png或其他)那是由这样的方块和闪电组成的,是的,我想这么做,但我太懒了,没有进入photoshop制作网格,我现在就试试