如何在PyGam中以定时增量显示精灵

2024-03-28 15:03:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Pygame中制作了一个游戏,其中一些角色出现在屏幕的一边,然后移动到另一边,在那里他们传送到他们开始的地方,然后再做一次。我希望精灵一次出现一个,在它们的产卵之间有一个随机的时间增量。我为精灵们创建了一个类,我把他们放在一个叫做“怪物”的组中。我的闪电看起来像这样:

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

它的作用是使屏幕变黑直到所有的怪物都产生。我希望他们一次产生一个,让玩家能够看到。下面是上面代码所在的整个类:

^{pr2}$

我还有第二个问题。我希望精灵在繁殖后以随机速度移动(它们当前的位置(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))

谢谢你抽出时间。如果你需要更多的细节请告诉我。在


Tags: imageselfmove屏幕def地方时间random
3条回答

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

elapsed, visible_monsters = 0,0

意味着他在一条线上分配了两个变量。也可以写成

elapsed = visible_monsters = 0

在此期间不会发生任何事情

time.sleep(...)

所以当你等待每个monster成为blitted时,整个游戏就停止了。在

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

^{pr2}$

对于第二个问题,请保留monster和{}和{},这样以后可以重用它们,并在render时检查它们是否在screen中(例如0 <= self.x <= screenSize[0])。在

在时间。睡觉()只会明显地暂停你的程序,你可以在不同的时间产生怪物的唯一方法是使用时钟滴答声函数,因为您必须已经调用游戏时间时钟()转换为变量。我在玩蛇游戏时也用过很多次。您也可以使用Pygame USEREVENT可能您应该阅读Pygame文档,了解如何使用Pygame时间模块来做一些很酷的事情。事实上,你有两个while循环,没有办法结束,这可能会让你的游戏表面变黑,同时运行游戏,我觉得jornsharpeans是一个很好的去检查你的代码,只是解决问题

相关问题 更多 >