Ich habe versucht, einen bewegten Hintergrund in Pygame (gesteuert durch Pfeiltasten) zu erstellen. Mein Problem ist, dass wenn ein Bild den Rand der Fenster passiert, es einen schleppenden Effekt erzeugt. Alle Endpixel sind über den Rest des Fensters verteilt.Bild in Pygame ist Dragging Pixel über den Bildschirm
Dies ist meine Bewegung:
if pressed[pygame.K_RIGHT]:
if activate == True:
x-=1
left = False
right = True
bgx-=1
bg2x-=1
if pressed[pygame.K_LEFT]:
if activate == True:
x+=1
left = True
right = False
bgx+=1
bg2x+=1
Dies ist, wenn die Bilder am Ende des Fensters erreichen:
if bgx >= 1000 and right == True:
bgx = bg2x-1000
if bg2x >=1000 and right ==True:
bg2x = bgx-1000
if bgx <= -1000 and left == True:
bgx = bg2x+1000
if bg2x <=-1000 and left ==True:
bg2x = bgx+1000
if x <=-20 and right == True:
x = 1000
if x>=1000 and left == True:
x=-20
Und das ist, wo ich blitten in den Bildern:
screen.blit(bg,(bgx,bgy))
screen.blit(bg2,(bg2x,bg2y))
Jede Hilfe ist willkommen - Danke!
Ich weiß, ich bin es nicht dazu gedacht, aber hier ist meine gesamte Code
import pygame,sys
from pygame.locals import *
import os
game = ""
def home():
global game
pygame.init()
screen = pygame.display.set_mode((1000,750))
done = False
red= (255,0,0)
green = (0,255,0)
blue = (0,0,255)
white = (255,255,255)
yList = []
xList = []
pygame.mouse.set_visible(False)
for l in range(255):
yList.append(-100)
xList.append(-100)
clock=pygame.time.Clock()
messenger = True
img_rect = pygame.transform.scale(pygame.image.load("space.jpg"),(1000,750)).get_rect()
bg = pygame.Surface((img_rect.width, img_rect.height), pygame.SRCALPHA)
bg.fill((0, 0, 0, 0))
bg.blit(pygame.transform.scale(pygame.image.load("space.jpg"),(1000,750)), img_rect)
img_rect = pygame.transform.scale(pygame.image.load("space.jpg"),(1000,750)).get_rect()
bg2 = pygame.Surface((img_rect.width, img_rect.height), pygame.SRCALPHA)
bg2.fill((0, 0, 0, 0))
bg2.blit(pygame.transform.scale(pygame.image.load("space.jpg"),(1000,750)), img_rect)
bgx = 1000
bgy=0
bg2x=0
bg2y=0
right = True
left = False
activate = False
x=500
y=450
scale = 100
def messenger(msg, colour, size):
global text
font = pygame.font.SysFont("comicsansms", size)
text = font.render(msg, True, colour)
return(text)
while not done:
for event in pygame.event.get():
if event.type == pygame.QUIT:
done = True
pressed = pygame.key.get_pressed()
if pressed[pygame.K_SPACE]:
activate = True
y=450
x=500
if pressed[pygame.K_RIGHT]:
if activate == True:
x-=1
left = False
right = True
bgx-=1
bg2x-=1
if pressed[pygame.K_LEFT]:
if activate == True:
x+=1
left = True
right = False
bgx+=1
bg2x+=1
if bgx >= 1000 and right == True:
bgx = bg2x-1000
if bg2x >=1000 and right ==True:
bg2x = bgx-1000
if bgx <= -1000 and left == True:
bgx = bg2x+1000
if bg2x <=-1000 and left ==True:
bg2x = bgx+1000
if x <=-20 and right == True:
x = 1000
if x>=1000 and left == True:
x=-20
screen.blit(bg2,(bg2x,bg2y))
screen.blit(bg,(bgx,bgy))
if activate == True:
y-=0.3
scale+=1
pygame.draw.rect(screen,(255,0,0),(x,y,(scale*10)/100,(scale*50)/100))
pygame.draw.polygon(screen, (0,0,0), [(450,750),(550,750),(525,450),(475,450)])
pygame.draw.circle(screen,(255,0,0),(500,450),25)
pygame.display.flip()
clock.tick(60)
pygame.quit()
home()
Jetzt wird anstelle des Ziehens ein schwarzer Bildschirm angezeigt –
Haben Sie sichergestellt, dass der Füllbefehl über dem ist, wo Sie Ihre Bilder blit? – Xanuthatusu