首页 文章

如何在PyGame中按时间点增加精灵的spit

提问于
浏览
0

我正在Pygame制作一个游戏,其中一些角色出现在屏幕的一侧并移动到另一侧,在那里他们传送到他们开始的地方并再次进行 . 我希望精灵一次出现一个,它们的产生之间有一个随机的时间增量 . 我为精灵创建了一个类,我将它们放在一个名为“怪物”的组中 . 我的blitting他们看起来像这样:

for monster in monsters:
            monster.render(screen)
            time.sleep(0.5)

这样做会使屏幕变黑,直到所有怪物产生 . 我希望他们一次产生一个并让玩家能够看到它 . 以下是上面代码的全部类:

import pygame, sys, random, time
from monster import *

pygame.init()

class Main:
    clock = pygame.time.Clock()

    screenSize = (500,500)
    background = pygame.image.load("C:/Users/Nathan/PycharmProjects/Monsters II A Dark Descent/images/background.jpg")

    screen = pygame.display.set_mode(screenSize)
    pygame.display.set_caption("MONSTERS!")

    monsters = pygame.sprite.Group()

    counter = 0

    x = 450
    while counter < 5:
            y = random.randint(50,450)
            monster = Monster(x,y)
            monsters.add(monster)
            counter = counter + 1

    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()

        screen.blit(background,(0,0))

        for monster in monsters:
            monster.render(screen)
            time.sleep(0.5)


        x=x-1

        clock.tick(60)

        pygame.display.flip()


Main()

我还有第二个问题 . 我希望精灵在产生后随机移动速度(当前位置(x)加上一个随机数) . 我还希望他们在他们开始的地方传送,并在他们到达屏幕的末尾再次进行传送 . 这是精灵运动类:

def move(self):
        if(self.x > 500):
            self.x = 450
        self.x -= random.randint(1,5)

目前它们以不同的速度移动,只是离开屏幕的边缘 . 这是整个精灵类:

import random, pygame

class Monster(pygame.sprite.Sprite):

    def __init__(self, x, y):
        pygame.sprite.Sprite.__init__(self)
        self.x = x
        self.y = y
        self.image = pygame.image.load("C:\Users\Nathan\PycharmProjects\Monsters II A Dark Descent\images\monster.png")

    def move(self):
        if(self.x > 500):
            self.x = 450
        self.x -= random.randint(1,5)

    def render(self, screen):
        screen.blit(self.image, (self.x, self.y))

感谢您的时间 . 如果您需要更多详细信息,请通知我 .

3 回答

  • 0

    为了让不同的精灵出现在不同的时间你应该使用定时器循环,正如约翰所说 . 他给出的代码是正确的 . 这是你可以做到这一点而不减慢整个游戏循环的唯一方法 .

    已过去,visible_monsters = 0,0

    意味着他在一行中分配两个可变数 . 它也可以写成

    elapsed = visible_monsters = 0

  • 0

    什么都不会发生

    time.sleep(...)
    

    因此,当你等待每个 monster 时,整个游戏都会停止 .

    您需要允许 while True 循环继续运行,但控制正在显示的 monsters . 例如,您可以保留在合适的间隔后添加的 visible_monsters 的计数:

    elapsed, visible_monsters = 0, 0
    
    while True:
    
        elapsed += clock.tick(60)
    
        for event in pygame.event.get():
            ...
    
        screen.blit(background,(0,0))
    
        if elapsed >= 500:
            elapsed = 0
            visible_monsters += 1
    
        for monster in monsters[:visible_monsters]:
            monster.render(screen)
    

    对于您的第二个问题,请保留 monsterinit_xinit_y ,以便您以后可以重复使用它们并检查它们是否在_2454445_中(例如 0 <= self.x <= screenSize[0] ) .

  • 0

    time.sleep()只会显然暂停你的程序,并且你可以在不同的时间产生怪物的唯一方法是使用Clock.tick函数,因为你必须已经将pygame.time.Clock()调用到变量中 . 我也在蛇游戏中使用了很多次 . 你也可以使用Pygame USEREVENT,你应该阅读pygame文档,看看如何用pygame时间模块做一些很酷的事情 . 事实上,你有两个while循环没有结束它们可能会在运行游戏时将你的游戏界面变黑,我觉得jonrsharpe ans是一个很好的去再次检查你的代码并解决问题

相关问题