2011-09-19 2 views
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(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) '과 마찬가지로 많은 함수들이 rect를 사용할 수 있습니다. – ninMonkey

답변

1

문제를 발견했습니다. 내가 프로그램을 작성한 방식대로 새로운 배럴 이미지가 계속 재사용되었습니다. 스케일 변수가 변화하는 동안

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

이 방법은, 그것은 신선한 이미지,하지에 영향을 미치는 ...

while running: 

: 나는 배럴을 표시 후 바로 그래서, 나는 마지막에 넣어 수정 된 이미지

+0

barrel_original을 메모리의 표면으로 유지합니다. 결과 인 두 번째 표면은 실제로 blit 한 것입니다. 이것은 rotozoom을 사용하거나 회전 할 때도 사용됩니다. 이렇게하면 이미지를 다시로드 할 필요가 없습니다. * 모든 * zoom 및/또는 rotate. – 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() 또한

의 높이를 제공 I 수 없습니다 barrelx와 barrely를 업데이트하는 곳을 확인하십시오. 코드에서 당신은 배럴과 barrely 붙여 넣은 항상 0 일 것입니다.

+0

배럴은 "x"좌표이고 barrely는 "y"좌표 및 배율 변수입니다. – Ripspace

+0

그건 당신 코드가하는 것이 아닙니다. 실제로 사용하고있는 코드를 게시 할 수 있습니까? – teambob

0

당신의 문제가 내게 완전히 명확하지 않습니다. 왼쪽면과 위쪽면 만 커지고 있다는 말씀입니까? 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)])