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 然后你把那张纸放在屏幕.
我正在尝试制作一个图像同时向下移动并消失的动画,如下所示:
但是,我似乎无法让它正常工作。我只想改变屏幕的动画部分,所以我做了这样的事情...
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 然后你把那张纸放在屏幕.