如何解决pygame随机精灵生成
使用下面的代码,我只会产生1个敌人。它落在随机的x坐标上,但是没有更多了。即使我在循环之前创建了一个敌人列表。
代码:
import pygame
import sys
import random
pygame.init()
#MAIN GAME
game_screen = pygame.display.set_mode((600,600))
pygame.display.set_caption("Beer Goggles")
bg = pygame.image.load("bg.png")
bg_image = pygame.transform.scale(bg,(600,600))
class Object:
def __init__(self,image_path,width,height,x,y):
self.image_path = image_path
self.width = width
self.height = height
self.x = x
self.y = y
player = pygame.image.load(image_path)
self.player_main = pygame.transform.scale(player,(width,height))
def draw(self,background):
background.blit(self.player_main,(self.x,self.y))
def enemy():
enemy_list = []
for e in range(0,200):
x_cor = random.randint(25,361)
e = Object("enemy.png",70,x_cor,25)
enemy_list.append(e)
return enemy_list
#Main Objects
player1 = Object("crate.png",25,500)
list1 = enemy()
#ladies
fat_lady = Object("fat_lady.png",300,360,180)
#title
#title = Object("bgog.png",150,100,25)
# Main Loop
direction = 0
game_on = True
while game_on:
clock = pygame.time.Clock()
clock.tick(60)
for event in pygame.event.get():
if event.type == pygame.QUIT:
game_on = False
pygame.quit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_RIGHT:
direction = 1
elif event.key == pygame.K_LEFT:
direction = -1
elif event.type == pygame.KEYUP:
if event.key == pygame.K_RIGHT or event.key == pygame.K_LEFT:
direction = 0
game_screen.fill((0,0))
game_screen.blit(bg_image,(0,0))
#title.draw(game_screen)
player1.draw(game_screen)
fat_lady.draw(game_screen)
for enemy in list1:
a = random.randint(5,25)
enemy.draw(game_screen)
enemy.y += a
#move
if direction > 0:
player1.x = player1.x + 10
elif direction < 0:
player1.x = player1.x - 10
#boundries
if player1.x <= 25:
player1.x = 25
elif player1.x >= 360:
player1.x = 360
#collisions
pygame.display.update()
quit()
解决方法
在功能enemy
中,您需要确定return语句的大小。
def enemy():
enemy_list = []
for e in range(0,200):
x_cor = random.randint(25,361)
e = Object(70,70,x_cor,25)
enemy_list.append(e)
return enemy_list
但是,这会使您所有的敌人一下子跌倒。您可能需要某种计时器。
您可以使用time.time()
。它给出自纪元以来经过的秒数。在循环外使用start
这两个变量,在循环内使用now
这两个变量,求它们的差并与一定时间进行比较。然后将start设置为now重置计时器。示例:
import time
start = time.time()
desired_time_in_seconds = 1
while True:
now = time.time()
if now - start > desired_time_in_seconds:
print("this is printed every",desired_time_in_seconds,"second")
start = now
顺便说一下,pygame.time.get_ticks()
与time.time()的作用相同,但是返回自上一帧以来经过的时间(以毫秒为单位)。现在就您而言:
start = time.time()
def enemy():
now = time.time()
enemy_list = []
if now - start > certain_seconds:
x_cor = random.randint(25,361)
e = Object("enemy.png",25)
enemy_list.append(e)
start = now
return enemy_list
while True:
list1 = enemy()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。