Pygame:精灵位置和黑色矩形边框

时间:2014-11-27 18:49:02

标签: pygame sprite

在开始之前,让我说我是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()

我计划用这个程序加载我的精灵(弗朗西斯)并使用箭头键将他移动到屏幕上。我计划通过按下每个箭头键从lead_x加上或减去10个像素来创建该动作,这应该是精灵的x位置。我不确定我用于加载精灵的代码是否正确。我用“francis.rect.center”然后给出了坐标。有没有更好的方法来加载和定位精灵?

另外,每当我加载它时,我的精灵周围都有一个黑色矩形。精灵本身是一张30x70的图片。如果没有实际人物的像素,我只是有透明度。透明度工作正常,但每当我加载图像时,精灵的边框周围都有一个黑色矩形。我有一种感觉,这与我加载精灵的方式有关,但如果你让我知道,我会很感激。 (我尝试将它转换为png,bmp和jpg。png和bmp都有黑色边框,jpg有黑色背景而不是透明度)

感谢任何和所有帮助!

3 个答案:

答案 0 :(得分: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图像具有alpha通道,它是图像的透明部分。如果您不知道这意味着将图像加载到图像编辑器中并通过选择并删除它们来删除不需要的部分。现在这些部件将不包含颜色信息,因此将成为图像的alpha通道。 您还可以通过

设置图像的颜色键
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

希望这会有所帮助。

答案 1 :(得分:0)

关于你如何定位精灵,我相信常规是左上角,但我认为这并不重要。

尝试在绘画中打开图片并将其另存为gif。请注意,通过重命名更改文件扩展名没有区别,它实际上仍然是相同的文件类型。因此,要更改文件类型,必须使用“另存为”选项并选择文件类型。假设你还没到目前为止,尝试使用这种方法使用gif或png。

答案 2 :(得分:0)

francis.rect.center = [lead_x,lead_y]

您将其设置为列表。我很确定这是一个元组,即。

francis.rect.center =(lead_x,lead_y)

“.convert”部分在“francis.image = pygame.image.load(”francis.png“)中做了什么。转换()” 我很确定它并不意味着在那里,除非你特别知道你需要它,否则请尝试删除它。

您忘记了代码中的关键行。在主循环结束时,您应该说以下行;

pygame.display.flip()

这与如何从上到下加载像素或其他东西有关,老实说我不知道​​,但我很确定你需要它,否则程序不会工作。我认为它取代了pygame.display.update()