Pygame-Screen.blit(源,目标,区域)返回空矩形

时间:2019-05-19 23:38:15

标签: pygame display rect

我正在尝试制作动画,其中图像同时向下移动并消失,就像这样:

enter image description here

但是,我似乎无法正常工作。我只希望更改带有动画的屏幕部分,所以我做了类似的事情……

orect = pygame.Rect(oSprite.rect)
    for i in range(10):
        screen.fill(Color(255,255,255),rect=orect)
        oSprite.rect.top += 12
        print(orect)
        print(screen.blit(oSprite.image, oSprite.rect, orect))
        pygame.display.update(orect)
        timer.tick(30)

其中oSprite是代表我要设置动画的图像的Sprite。

在文档中,screen.blit(source, dest, area)应该返回一个Rect,代表改变的像素,但是当我运行代码时,我得到了(超过10倍):

<rect(336, 48, 76, 74)>
<rect(336, 60, 0, 0)>

第二行是screen.blit()返回的内容,这意味着它更改了0x0区域,的确,我在代码运行时在屏幕上看到的只是突然变成白色,而不是任何动画。 。为什么会发生这种情况?从第一个print()语句可以看出,我为区域值输入的矩形是76x74,而不是0x0。

1 个答案:

答案 0 :(得分:3)

您需要在oSprite.image曲面的顶部而不是屏幕的曲面上进行弯曲。

这会在 oSprite.image 顶部绘制另一个图像,如果较大则不会在屏幕上显示。

oSprite.image.blit(new_image, (0,0))

已编辑: 以这个示例为例,运行它,看看发生了什么:

import pygame
from pygame.locals import *

pygame.init()
screen = pygame.display.set_mode((500,500))
run    = True

#Animation Speed
speed = 0.1

#Load an image.
player = pygame.image.load("player.png").convert_alpha()
x,y    = (0,0)

#Create a rectangular area to blit the player inside.
surf = pygame.Surface((player.get_width(),player.get_height()))


def Animate():
    global y

    if y > player.get_width():
        y = 0

    else:
        y += speed

while run:

    for event in pygame.event.get():
        if event.type==QUIT:
            run=False
            break;


    #Clear the surface where you draw the animation.
    surf.fill((255,255,255))

    #Draw the image inside the surface.
    surf.blit(player, (x,y))

    #Draw that surface on the screen.
    screen.blit(surf, (20,20))

    #Animate the image.
    Animate()

    pygame.display.update()

pygame.quit()




pygame.quit()

想象一下冲浪是一张纸,然后在其中绘制图像,然后将其放在屏幕上。