2013-11-15 34 views
16

Ekran çözünürlüğüne pygame projelerindeki görüntülerin boyutunu ölçeklemek için nasıl giderim diye merak ediyordum. Örneğin, şu an için pencereli ekran modunu varsayarak aşağıdaki senaryoyu göz önünde bulundurun; Ben tam ekran aynı olacaktır varsayalım: Resimlerin boyutuna göre ölçeklendirme Pygame

  • Ben 1280x720 penceresinde

  • Açıkçası sadece bu görüntüleri rect ölçeklenebilir bir 1600x900 pencerede doğal kurs ekranların bir 1600x900 arka plan resmine sahip Ben eklemeniz gerekiyorsa ne olur 1280x720

  • Ancak orijinal 1600x900 arka plan ile uyacak boyuttadır x,y 1440,860 (örnek boyutları) bir 300x300 px görüntü demek? Tabii ki 1600x900 için Tabi ki görüntüyü doğal olarak kullanabilirim ama daha küçük/büyük pencere boyutları hakkında ne yapabilirim?

Temel olarak, görüntüleri pencere boyutuna göre ölçeklendirir ve sonra bunları uygun şekilde nasıl konumlandırırım? ... önceden

Teşekkür, Ilmiont

cevap

38

Benim bir GERÇEKTEN kolay otomatikleştirilmiş yöntem olmalıdır sanırım ama şimdi ben onu anlamaya olamaz ve doğrusunu bunun aramak için zamanım yok pygame.transform.scale ile görüntüyü ölçeklenebilir:

import pygame 
picture = pygame.image.load(filename) 
picture = pygame.transform.scale(picture, (1280, 720)) 

Daha sonra birlikte picture sınırlayıcı dikdörtgen alabilirsiniz

rect = picture.get_rect() 

ve screen Widget'larınızın çeşitli ekran boyutlarına uyum sağlamak için

screen = pygame.display.set_mode((1600, 900)) 

gibi bir şeyle kuruldu

rect = rect.move((x, y)) 
screen.blit(picture, rect) 

ile resim hareket yaparsın make the display resizable:

import os 
import pygame 
from pygame.locals import * 

pygame.init() 
screen = pygame.display.set_mode((500, 500), HWSURFACE | DOUBLEBUF | RESIZABLE) 
pic = pygame.image.load("image.png") 
screen.blit(pygame.transform.scale(pic, (500, 500)), (0, 0)) 
pygame.display.flip() 
while True: 
    pygame.event.pump() 
    event = pygame.event.wait() 
    if event.type == QUIT: 
     pygame.display.quit() 
    elif event.type == VIDEORESIZE: 
     screen = pygame.display.set_mode(
      event.dict['size'], HWSURFACE | DOUBLEBUF | RESIZABLE) 
     screen.blit(pygame.transform.scale(pic, event.dict['size']), (0, 0)) 
     pygame.display.flip() 
+0

Tamam Anladım ama eğer arka plan görüntüsü, 1600x900'den 1280x720'ye ve 300x300'den 1280x720-1600x900'e göre bir düğüme kadar bir görüntü için ölçeklendirildi, ardından düğmenin küçük pencereye yerleştirileceği yerde nasıl çalışabilirim? Açıkça 600 piksel aşağı 1280x720 ekran üzerinde söyleyeceği için 1280x900 ekran, daha fazla konuşur. – Ilmiont

+0

Farklı bir en boy oranı için ayarlamayı mı kastediyorsunuz? En boy oranını kendiniz hesaplamanız ve her boyut değerini faktörü ile çarpmanız gerekir. – cprn

7

1600x900’ü ölçeklendirirseniz 128 0x720 Eğer

Eğer

scale_x = 1600.0/1280 
scale_y = 900.0/720 

sahip 1280x720 1600x900 için ölçeklerseniz

button_width = 300 * scale_x 
button_height = 300 * scale_y 

button_x = 1440 * scale_x 
button_y = 860 * scale_y 

ve gerisi aynıdır

scale_x = 1280.0/1600 
scale_y = 720.0/900 
düğme boyutunu bulmak için kullanabilirsiniz Daha

ve düğme konuma sahip .


Ben float yapmak için değer .0 eklemek - Aksi scale_x, scale_yinteger yuvarlanır - Bu örnekteki 0 (sıfır) (Python 2.x)

+0

pygame.transform.scale kullanılmaması için herhangi bir neden var mı? –

İlgili konular