2016-11-11 11 views
0

Also ja, ich baue ein Spiel. Von Anfang an habe ich vergessen, die Bildschirmgröße anzupassen. Und ich weiß, dass ich versuche, es einzubeziehen. Ich habe fast alles funktioniert, es ändert die Größe von Bildern, aber sie werden seltsam.Bilder werden nicht richtig skaliert

Bildschirm Setup

size = [1600, 1000] 
screen = pygame.display.set_mode((1600, 1000), HWSURFACE | DOUBLEBUF | RESIZABLE) 


pygame.display.set_caption('#Vote me for the ruler of the world!!!') 
clock = pygame.time.Clock() 

Welches Programm tut, wenn Fenster

elif event.type == VIDEORESIZE:###########IF WINDOW GETS REZISED 
    screen = pygame.display.set_mode(event.dict['size'], HWSURFACE | DOUBLEBUF | RESIZABLE) 
    pygame.display.flip() 
    if GUIstatus == 1: 
     screen.fill((color,color,color)) 
     screen.blit(pygame.transform.scale(spaceGUI, event.dict['size']),(0,0)) 
     screen.blit(pygame.transform.scale(screenMonitor,event.dict['size']),(0,0)) 
     screen.blit(pygame.transform.scale(button,event.dict['size']),(1425,10)) 
     screen.blit(pygame.transform.scale(button,event.dict['size']),(1425,75)) 
     screen.blit(pygame.transform.scale(button,event.dict['size']),(1425,140)) 
     screen.blit(pygame.transform.scale(text_button1,event.dict['size']),(1436, 30)) 
     pygame.display.flip() 

Bildbeispiele Normal, der Größe verändert wird Wierd

Also, was hier geschieht?

BEARBEITEN Dies ist der Code für die Originalbildzeichnung. (Hauptschleife)

done = False 
while done == False: 
    pygame.event.pump() 
    mouse_x,mouse_y = pygame.mouse.get_pos() 


    timer += 1 
    if timer > 99: 
     timer = 0 

    if GUIstatus == 1: ####HERE IS THE ORIGINAL IMAGE DRAWING 
     screen.blit(spaceGUI,(0,0)) 
     screen.blit(screenMonitor,(0,0)) 
     screen.blit(button,(1425,10)) 
     screen.blit(button,(1425,75)) 
     screen.blit(button,(1425,140)) 
     screen.blit(text_button1, (1436, 30)) 

     if techTreeRect.collidepoint(mouse_x,mouse_y) and event.type == pygame.MOUSEBUTTONDOWN and event.button == 1: 
      print("techtree") 

     if contactsRect.collidepoint(mouse_x,mouse_y) and event.type == pygame.MOUSEBUTTONDOWN and event.button == 1: 
      print("Contacts") 
      GUIstatus = 3 
      screen.fill((color,color,color)) 
+1

Es sieht so aus, als ob der Hintergrund nicht neu gezeichnet wird. Ist 'Farbe' definiert? Ändert 'screen.fill ((255, 255, 255))' irgendetwas? –

+0

Es sieht so aus, als ob Sie sowohl die skalierte als auch die normale Version zeichnen. Ich nehme an, dass Sie vor diesem Code in Ihrer Spielschleife zeichnen. dass dieser Code nicht das einzige Mal ist, dass du auf den Bildschirm blitzest. –

+0

@WyattIsrael Farbe ist am Anfang definiert ich benutze 'screen.fill ((Farbe, Farbe, Farbe))' Da am Anfang des Programms ist wie glatte Transaktion, was den Bildschirm von Schwarz aufhellt. Also ja Farbe ist definiert seine aktuelle Farbe 255 auf dem Programm – cmdtvt

Antwort

0

Wenn Sie die Größe des Bildschirms ändern, blättern Sie die skalierten Bilder nur einmal und kehren dann zu den ursprünglichen Bildern zurück. Um dies zu beheben, können Sie die Bilder erneut an ihre skalierte Version binden. Wenn Ihre Bilder pixelbasiert sind, können sie verzerrt sein. Sie müssen also einen Verweis auf das Originalbild haben und es transformieren, anstatt ein bereits transformiertes Bild zu transformieren.

Also in Ihrem VIDEORESIZE Fall, dass Sie zum Beispiel könnte dies tun:

spaceGUI = pygame.transform.scale(spaceGUI, event.dict['size']) 

für jedes Bild, statt Blitten.

+0

Ok, das scheint zu funktionieren. Aber wie könnte ich 'pygame.transform.scale (spaceGUI, event.dict ['size'])' für Text und Rechtecke verwenden? weil mein Verständnis von Pygame nicht sehr groß ist, würde helfen, das Konzept zu verstehen. – cmdtvt

+0

'transform.scale' funktioniert auf' Surfaces'. Alles, was Sie auf den Bildschirm legen, muss durch ein Surface-Objekt dargestellt werden, so dass Sie es für alles, was sichtbar ist, verwenden können. Text wird erstellt, indem ein Surface mit Text aus einem Font-Objekt gerendert wird, damit es wie ein Bild funktioniert. Rect's werden ** nicht ** visuell verwendet, sondern um Oberflächen zu positionieren. Wenn Sie die Größe eines Rect ändern möchten, können Sie 'rect.size = event.dict ['size']' verwenden oder [rect.inflate (x, y) '] (http://pygame.org/docs) verwenden /ref/rect.html#pygame.Rect.inflate), um die Größe nach Offset zu ändern. –

+0

Ja, das scheint wie erwartet für 'VIDEORESIZE'' rect.size = event.dict ['size']' funktioniert perfekt. – cmdtvt

Verwandte Themen