Pygame- Screen.blit(source, dest, area) returns 空矩形

Pygame- Screen.blit(source, dest, area) returns empty rectangle

我正在尝试制作一个图像同时向下移动并消失的动画,如下所示:

但是,我似乎无法让它正常工作。我只想改变屏幕的动画部分,所以我做了这样的事情...

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) 应该 return 一个表示已更改像素的 Rect,但是当我 运行 我的代码时,我得到了这个(超过 10 次):

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

第二行是由screen.blit()编辑的return,意思是它改变了一个0x0区域,事实上,当代码是运行ning时,我在屏幕上看到的是突然变成白色,而不是任何动画。为什么会发生这种情况?从第一个 print() 语句可以看出,我为区域值输入的矩形是 76x74,而不是 0x0。

您需要在 oSprite.image 表面上进行 blit,而不是屏幕表面。

这将在 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()

假设 surf 是一张纸,你在里面画 image 然后你把那张纸放在屏幕.