2011-09-19 92 views
0

當我嘗試縮放對象時,只有圖像的左上角變大。其餘的保持不變。我想要一個平衡的比例。Pygame的縮放問題

import pygame._view 
import pygame, sys 
from pygame.locals import * 
import random 
pygame.init()  


barrel = pygame.image.load("images\Barrel.gif") 
barrelx = 0 
barrely = 0 

while running: 

    barrel = pygame.transform.scale(barrel, (int(barrely/4), int(barrely/4))) 
    screen.blit(barrel, (barrelx, barrely)) 

無論如何,它總是變得越來越大(如數字),直到它脫離屏幕。 我在Windows XP上使用Python 2.7。

+0

存儲位置爲'pygame.Rect()'barrel_loc = pygame.Rect(0,0),使其他的東西更容易。像'barrel_loc.center =(100,100)'以及許多功能可以使用矩形。 – ninMonkey

回答

1

我想出了問題!我編寫程序的方式,新的桶形圖像不斷被重用。所以,我顯示了桶之後,我把結尾:

while running: 

...

barrel = pygame.transform.scale(barrel, (init(barrely/4),init(barrely/4))) 
screen.blit(barrel, (barrelx, barrely)) 
barrel = pygame.image.load("images\Barrel.gif") 

這種方式,而規模變量發生變化,它會影響一個新的形象,而不是修改後的圖像。

+0

將barrel_original保留爲內存中的曲面。第二個表面就是結果,就是你實際上會碰到的東西。這也用於使用rotozoom或旋轉。這可以防止需要重新加載圖像*每個*縮放和旋轉。 – ninMonkey

0

難道不應該是:

import pygame._view 
import pygame, sys 
from pygame.locals import * 
import random 
pygame.init()  


barrel = pygame.image.load("images\Barrel.gif") 
barrelx = 0 
barrely = 0 

while running: 

    barrel = pygame.transform.scale(barrel, (int(barrelx/4), int(barrely/4))) 
    screen.blit(barrel, (barrelx, barrely)) 

在你的代碼給barrely的寬度兩個pygame.transform.scale()

同樣的高度,我不能看到你在哪裏更新桶和禁止。在代碼中,你粘貼的桶和巴爾將永遠是0.

+0

barrelx是「x」座標,而barrely是「y」座標和刻度變量。 – Ripspace

+0

這不是你的代碼所做的。你能否發佈你實際使用的代碼? – teambob

0

這並不完全清楚你的問題是什麼。你是說只有左右兩邊變大嗎?這可能是pygame中的一個bug,因爲scale不應該像那樣工作。矩形保持矩形(每個圖像都是矩形)。

如果圖片展開到左側和頂部,這意味着在圖像大小調整前後的循環中的某處,您將桶形圖像向左上移,與桶的增長量相同。只要刪除它。 (當您縮放圖像時,左上角始終保持在同一位置)。

如果這樣不能解決您的問題,您應該更詳細地解釋您的問題。

+0

桶設想垂直向下移動,但是當它縮放時,桶向右和向下移動。 – Ripspace

0

「圖像的頂部和左側變大」是否意味着圖像在中間沒有變大,左上角總是保持在同一位置? 如果我的理解是正確的,你可以試試這個:

import pygame._view 
import pygame, sys 
from pygame.locals import * 
import random 
pygame.init()  


barrel1 = pygame.image.load("images\Barrel.gif") 
barrel1x = 0 
barrel1y = 0 
#get width,height of image 
width1,height1 = barrel1.get_size() 
running = True 


while running: 

    barrel2 = pygame.transform.scale(barrel1, (int(barrely/4), int(barrely/4))) 
    width2,height2 = barrel2.get_size() 
    #position - difference of width or height /2 
    screen.blit(barrel, [round(barrelx - (width1 - width2)/2), 
         round(barrely - (height1 - height2)/2)])