我正在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))
感谢您的时间。如果您需要更多详细信息,请与我们联系。
答案 0 :(得分:0)
在
期间不会发生任何time.sleep(...)
所以当你等待每个monster
为blit
时,整个游戏都会停止。
您需要允许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)
对于您的第二个问题,请保留monster
的{{1}}和init_x
,以便您以后可以重复使用它们并在init_y
时检查它们是否在screen
内render
1}}他们(例如0 <= self.x <= screenSize[0]
)。
答案 1 :(得分:0)
要在不同的时间出现各种精灵,你应该使用定时器循环,正如约翰所说。他给出的代码是正确的。这是你可以做到这一点而不会减慢整个游戏循环的唯一方法。
已过去,visible_monsters = 0,0
意味着他在一行中分配两个可变数。它也可以写成
elapsed = visible_monsters = 0
答案 2 :(得分:0)
time.sleep()只会显然暂停你的程序,并且你可以在不同的时间产生怪物的唯一方法是使用Clock.tick函数,因为你必须已经调用了pygame.time.Clock()一个变量。我也在蛇游戏中使用了很多次。你也可以使用Pygame USEREVENT,你应该阅读pygame文档,看看如何用pygame时间模块做一些很酷的事情。事实上,你有两个while循环而没有结束它们可能会在运行游戏时将你的游戏界面变黑,我觉得jonrsharpe ans是一个很好的去再次检查你的代码并解决问题