使用Pygame缩放问题

时间:2011-09-19 00:56:11

标签: python image transform scale 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。

4 个答案:

答案 0 :(得分: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")

这样,当比例变量发生变化时,它会影响新图像,而不会影响修改后的图像。

答案 1 :(得分: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))

在你的代码中,你只是为宽度提供pygame.transform.scale()的高度

此外,我无法看到你更新桶的位置和barrely。在您粘贴的代码中,桶状和barrely将始终为0。

答案 2 :(得分:0)

我不清楚你的问题是什么。你是说只有左侧和上侧越来越大?这可能是pygame中的一个错误,因为scale不应该像那样工作。矩形保持矩形(每个图像都是矩形)。

如果图片向左和向上扩展,这意味着在循环中的某个位置,在调整图像大小之前或之后,您将桶形图像向左移动,向上移动,与桶的长度相同。只需删除它。 (缩放图像时,左上角始终保持在同一位置。)

如果这没有解决您的问题,您应该详细了解您的解释。

答案 3 :(得分: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)])