2014-11-27 3 views
1

Прежде чем я начну, позвольте мне сказать, что я полный новичок в Pygame.Pygame: размещение спрайтов и черная рамка прямоугольника

Вот моя текущая программа:

import pygame, sys, random 

pygame.init() 

white = ((255,255,255)) 
display_width = 800 
display_height = 600 



FPS = 15 

gameDisplay = pygame.display.set_mode((display_width, display_height)) 
pygame.display.set_caption('Francis') 



gameExit = False 

lead_x = display_width/2 
lead_y = display_height/2 
lead_x_change = 0 
lead_y_change = 0 

clock = pygame.time.Clock() 

while not gameExit: 
    for event in pygame.event.get(): 
     if event.type== pygame.QUIT: 
      gameExit = True 
    francis = pygame.sprite.Sprite() #create sprite 
    francis.image = pygame.image.load("francis.png").convert() #load francis image 
    francis.rect = francis.image.get_rect() # use image extent values 
    francis.rect.center = [lead_x,lead_y] 


    gameDisplay.fill(white) 
    gameDisplay.blit(francis.image, francis.rect) 
    pygame.display.update() 

    clock.tick(FPS) 

pygame.quit() 
quit() 

То, что я планирую сделать с этой программой нагрузки в моем спрайта (Francis) и используйте клавиши со стрелками, чтобы переместить его по экрану. Я планирую создать это движение, нажав каждую клавишу со стрелкой, чтобы добавить или вычесть 10 пикселей из lead_x, который должен быть местом расположения спрайта. Я не уверен, правильный ли код, который я использовал для загрузки в спрайте. Я использовал «francis.rect.center», а затем дал координаты. Есть ли лучший способ загрузить и разместить спрайт?

Кроме того, мой спрайт имеет черный прямоугольник вокруг него, когда я его загружаю. Сам спрайт представляет собой изображение 30х70. Там, где нет пикселя фактического человека, у меня просто прозрачность. Прозрачность работает отлично, но всякий раз, когда я загружаю изображение, вокруг границы спрайта есть черный прямоугольник. У меня такое чувство, что это связано с тем, как я загружался в спрайт, но я был бы признателен, если бы вы сообщили мне. (Я попытался преобразовать его в png, bmp и jpg. Png и bmp имеют черные границы, а jpg имеет черный фон вместо прозрачности).

Любая помощь приветствуется!

ответ

0

Относительно того, как вы позиционируете спрайты, я считаю, что норма должна лежать сверху слева, но я не думаю, что это имеет большое значение.

Попробуйте открыть рисунок в краске и сохранить его как gif. Обратите внимание, конечно, что изменение расширения файла не имеет значения, переименовав его, это фактически все тот же тип файла. Чтобы изменить тип файла, вы должны использовать опцию «Сохранить как» и выбрать тип файла. Попробуйте использовать gif или png, используя этот метод, предположив, что у вас пока нет.

0

francis.rect.center = [lead_x, lead_y]

Вы можете установить его в качестве списка. Я уверен, что это означало быть кортеж т.е.

francis.rect.center = (lead_x, lead_y)

Что делает ".convert" часть делают в «francis.image = pygame.image. load ("francis.png"). convert() " Я уверен, что он не должен быть там, попробуйте удалить его, если вы специально не знаете, что вам это нужно.

Вы забыли ключевую строку в своем коде. В конце mainloop вы должны сказать следующую строку;

pygame.display.flip()

Это что-то делать с тем, как он загружает пикселей сверху вниз или что-то, я честно не знаю, но я уверен, что вам это нужно иначе программа не будет работать. Я думаю, что он заменяет pygame.display.update()

1

Когда вы ваше загрузить изображение с

francis.image = pygame.image.load("francis.png").convert() #load francis image 

вы должны сделать

francis.image = pygame.image.load("francis.png").convert_alpha() #load francis image 

, как PNG изображение имеет альфа-канал, который является прозрачным часть изображения. Если вы не знаете, что это означает, загрузите изображение в редактор изображений и удалите часть, которая вам не нужна, выбирая и удаляя их.Теперь эти части не будут содержать никакой информации о цвете, и для этого будет альфа-канал для изображения. Вы также можете установить ключ цвета изображения с помощью

francis.image.set_colorkey(0, RLEACCEL) # the colour key is set to 0 

Ключевой цвет также прозрачны. (Вот как они снимают фильмы, такие как человек-паук, фантастические четыре и т. Д. :-)) читайте это тоже https://www.pygame.org/docs/ref/surface.html#pygame.Surface.set_alpha.

надеюсь, что это поможет.

Смежные вопросы