如何在一个模块中对多个 pygame 脚本进行排队



有谁知道有没有办法让pygame脚本一个接一个地运行?这是我下面的模块,我想知道我是否可以让它们以一定的间隔部署,也就是说,我希望"A_long_time_ago"运行,持续 5 秒然后关闭并立即加载"声音"和"徽标",然后 3 秒后让它们关闭,过渡到"Title_Crawl"。

模块

from A_long_time_ago import *
from sounds import *
from logo import *
from Title_Crawl import *

A_long_time_ago

import pygame
import time
pygame.init()
screen = pygame.display.set_mode((1376, 760))
clock = pygame.time.Clock()
done = False
font = pygame.font.SysFont("franklingothicbook", 40)
text = font.render("A long time ago in a galaxy far, far away....", True,         (75, 213, 238))

while not done:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            done = True
        if event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE:
            done = True
    screen.fill((0, 0, 0))
    screen.blit(text,
        (700 - text.get_width() // 2, 380 - text.get_height() // 2))
    pygame.display.flip()
    clock.tick(60)

听 起来

import pygame
pygame.mixer.init()
pygame.mixer.pre_init(44100, -16, 2, 2048)
pygame.init()
pygame.mixer.music.load('The_Theme.wav')
pygame.mixer.music.play()

商标

    import pygame
    import os
    _image_library = {}
    def get_image(path):
            global _image_library
            image = _image_library.get(path)
            if image == None:
                    canonicalized_path = path.replace('/', os.sep).replace('\', os.sep)
                    image = pygame.image.load(canonicalized_path)
                    _image_library[path] = image
            return image
    pygame.init()
    screen = pygame.display.set_mode((1000, 800))
    done = False
    clock = pygame.time.Clock()
    while not done:
            for event in pygame.event.get():
                    if event.type == pygame.QUIT:
                            done = True
            screen.fill((0, 0, 0))
            screen.blit(get_image('sw.png'), (10, 10))
            pygame.display.flip()
            clock.tick(60)

Title_Crawl

#!/usr/bin/python
import pygame
from pygame.locals import *
pygame.init()
pygame.display.set_caption('Title Crawl')
screen = pygame.display.set_mode((1000, 800))
screen_r = screen.get_rect()
font = pygame.font.SysFont("franklingothicdemibold", 40)
clock = pygame.time.Clock()
def main():
    crawl = ["Star Wars - The Wilds"," ","It is  a dark time for the Galaxy. The evil Dark","Lord, Vitiate is rising to power. Alone, a single", "spec   is  on  a  trip,  a  trip that will ultimately", "rectify  the wrongs of the galaxy. The keepers ", "of  peace are dying out and the  DARK SIDE is", "lurking,   a   conniving   force   determined  to", "become the omniarch."]
    texts = []
    # we render the text once, since it's easier to work with surfaces
    # also, font rendering is a performance killer
    for i, line in enumerate(crawl):
        s = font.render(line, 1, (229, 177, 58))
        # we also create a Rect for each Surface. 
        # whenever you use rects with surfaces, it may be a good idea to use sprites instead
        # we give each rect the correct starting position 
        r = s.get_rect(centerx=screen_r.centerx, y=screen_r.bottom + i * 45)
        texts.append((r, s))
    while True:
        for e in pygame.event.get():
            if e.type == QUIT or e.type == KEYDOWN and e.key == pygame.K_ESCAPE:
                return
        screen.fill((0, 0, 0))
        for r, s in texts:
            # now we just move each rect by one pixel each frame
            r.move_ip(0, -1)
            # and drawing is as simple as this
            screen.blit(s, r)
        # if all rects have left the screen, we exit
        if not screen_r.collidelistall([r for (r, _) in texts]):
            return
        # only call this once so the screen does not flicker
        pygame.display.flip()
        # cap framerate at 60 FPS
        clock.tick(60)
if __name__ == '__main__': 
    main()

最好的方法是将它们制作成类并给它们一个 run 方法,然后在计时器上实例化每个类并调用其 run 方法来执行它需要做的事情。

最新更新