0

我正在制作一个游戏果酱,并决定从一些简单的雨开始。一切正常,但是当速度改变时,似乎有一个“轮”的雨在循环的第一次通过,然后在短暂的延迟后,雨将开始持续下降。

图片名称 图片
掉落.png 1
雨0.png 2
雨1.png 3
雨2.png 4
雨3.png 5
import pygame as pg 
import sys, os
import random

pg.init()

clock = pg.time.Clock()
size = width, height = (800,800)
screen = pg.display.set_mode(size)

class Rain(pg.sprite.Sprite):

    def __init__(self):

        pg.sprite.Sprite.__init__(self)

        self.image = pg.image.load("rain/drop/drop.png").convert_alpha()
        self.rect = self.image.get_rect()

        self.speed = random.randint(4,10)
        self.rect.x = random.randint(0,800)
        self.rect.y = random.randint(-400,-1)


        self.splash_current = 0
        self.splash = []

        self.splash_frames()

    def update(self):

        self.rect.y += self.speed

        if self.rect.y > 700:

            self.speed = 0

            if not self.splash_anim():

                pass

    def splash_frames(self):

        for i in os.listdir("rain/frames"):
            for j in range(5):
                self.splash.append(pg.image.load(f"rain/frames/{i}").convert_alpha())

    def splash_anim(self):

        self.splash_current += 1

        if self.splash_current == len(self.splash):

            self.image = pg.image.load("rain/drop/drop.png").convert_alpha()
            self.splash_current = 0
            self.rect.y = -200
            self.speed = random.randint(4,10)

            return False

        else:
            self.image = self.splash[self.splash_current]


rain_group = pg.sprite.Group()

for i in range(200):

    rain = Rain()
    rain_group.add(rain)

while True:

    for event in pg.event.get():

        if event.type == pg.QUIT:
            pg.quit()
            sys.exit()

    screen.fill((93, 109, 110))

    rain_group.update()
    rain_group.draw(screen)
    pg.display.flip()
    clock.tick(60)

当 in 的值self.speed从更改(4,10)为其他任何值时,它似乎更明显,但它仍然(稍微)引人注目(4,10)

我们的目标是让雨水同时开始和落下,这是在第一次尴尬的传球之后发生的。我花了相当长的时间查看代码并进行更改,但我不确定为什么第一次通过的方式会发生这种情况。有什么建议么?

4

0 回答 0