Python 在pygame中,如何停止在曲面上渲染运动图像的每一帧?
我正在尝试使用pygame制作一个简单的降雨动画。我向下移动图像,但更新它的垂直位置;但是,雨滴运动的每一帧都会渲染到屏幕上。很多资料都指出,我必须在每一帧刷新屏幕,但是位置更新还应该去哪里呢 以下是完整的代码:Python 在pygame中,如何停止在曲面上渲染运动图像的每一帧?,python,pygame,Python,Pygame,我正在尝试使用pygame制作一个简单的降雨动画。我向下移动图像,但更新它的垂直位置;但是,雨滴运动的每一帧都会渲染到屏幕上。很多资料都指出,我必须在每一帧刷新屏幕,但是位置更新还应该去哪里呢 以下是完整的代码: import sys import pygame from raindrops import Raindrop from pygame.sprite import Group def let_it_rain(): '''initialize pygame, setting
import sys
import pygame
from raindrops import Raindrop
from pygame.sprite import Group
def let_it_rain():
'''initialize pygame, settings, and screen object'''
pygame.init()
screen_width = 1200
screen_height = 800
bg_color = (144, 177, 226)
screen = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption("Let It Rain")
raindrop = Raindrop(screen)
raindrops = Group()
#number of drops in a row
spacex = screen_width - (2 * raindrop.rect.width)
raindrop_number_x = int(spacex / (2 * raindrop.rect.width))
#start window for raindrops
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
#create row of raindrops
for raindrop_number in range(raindrop_number_x):
raindrop = Raindrop(screen)
raindrop.x = raindrop.rect.x + 2 * raindrop.rect.x * raindrop_number
raindrop.rect.x = raindrop.x
raindrops.add(raindrop)
screen.fill(bg_color)
raindrops.update()
raindrops.draw(screen)
pygame.display.flip()
let_it_rain()
以及相关的雨滴模块:
import pygame
from pygame.sprite import Sprite
class Raindrop(Sprite):
def __init__(self, screen):
#load image
super(Raindrop, self).__init__()
self.screen = screen
self.pic = pygame.image.load('rain.png')
self.image = pygame.transform.smoothscale(self.pic,(50,60))
self.rect = self.image.get_rect()
#starting position
self.rect.x = self.rect.width
self.rect.y = self.rect.height
#store exact decimal position of rainddrop
self.x = float(self.rect.x)
self.y = float(self.rect.y)
def update(self):
speed = 5
self.y += speed
screen_rect = self.screen.get_rect()
self.rect.y = self.y
#once raindrops reach the bottom of the screen, reposition to the top corrdinates
if self.rect.y == screen_rect.bottom:
self.y = 0
self.rect.y = 0
您需要做的是将创建雨滴的for循环移动到while循环之前,如下所示: 导入系统 导入pygame 从雨滴导入雨滴 从pygame.sprite导入组 让它下雨吧 ''初始化pygame、设置和屏幕对象'' pygame.init() 屏幕宽度=1200 屏幕高度=800 背景颜色=(144177226) screen=pygame.display.set_模式((屏幕宽度、屏幕高度)) pygame.display.set_标题(“让它下雨吧”) 雨滴=雨滴(屏幕) 雨滴=组() #连续下降的次数 spacex=屏幕宽度-(2*雨滴矩形宽度) 雨滴数=int(空格x/(2*raindrop.rect.width)) #创建一排雨滴 对于范围内的雨滴数(雨滴数): 雨滴=雨滴(屏幕) raindrop.x=raindrop.rect.x+2*raindrop.rect.x*raindrop\u编号 雨滴.rect.x=雨滴.x 雨滴。添加(雨滴) #启动雨点窗口 尽管如此: 对于pygame.event.get()中的事件: 如果event.type==pygame.QUIT: sys.exit() 屏幕填充(背景颜色) raindrops.update() 雨点。绘制(屏幕) pygame.display.flip() 让它下雨吧
当它在循环中时,它不断在每个新的y位置重新创建雨滴您需要做的是在while循环之前移动创建雨滴的for循环,如下所示: 导入系统 导入pygame 从雨滴导入雨滴 从pygame.sprite导入组 让它下雨吧 ''初始化pygame、设置和屏幕对象'' pygame.init() 屏幕宽度=1200 屏幕高度=800 背景颜色=(144177226) screen=pygame.display.set_模式((屏幕宽度、屏幕高度)) pygame.display.set_标题(“让它下雨吧”) 雨滴=雨滴(屏幕) 雨滴=组() #连续下降的次数 spacex=屏幕宽度-(2*雨滴矩形宽度) 雨滴数=int(空格x/(2*raindrop.rect.width)) #创建一排雨滴 对于范围内的雨滴数(雨滴数): 雨滴=雨滴(屏幕) raindrop.x=raindrop.rect.x+2*raindrop.rect.x*raindrop\u编号 雨滴.rect.x=雨滴.x 雨滴。添加(雨滴) #启动雨点窗口 尽管如此: 对于pygame.event.get()中的事件: 如果event.type==pygame.QUIT: sys.exit() 屏幕填充(背景颜色) raindrops.update() 雨点。绘制(屏幕) pygame.display.flip() 让它下雨吧 当它在圈内时,它不断地在每个新的y形位置重现雨滴