2017-06-12 3 views
1

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

this is what it looks like

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() 

Antwort

0

Sind auch Sie ein screen.fill überall? Es hört sich so an, als ob das vorherige Bild nicht gereinigt wird, bevor das nächste gezeichnet wird.

Ein Beispiel:

screen.fill((0,0,0))

Wenn Sie setzen, dass vor Ihrem blitting, sollte es den Bildschirm schwarz füllen (das vorherige Bild zu löschen), bevor Ihr Bild an seinem neuen Standort Blitten.

+0

Jetzt wird anstelle des Ziehens ein schwarzer Bildschirm angezeigt –

+0

Haben Sie sichergestellt, dass der Füllbefehl über dem ist, wo Sie Ihre Bilder blit? – Xanuthatusu