我正试图创造一个自上而下的射手,但我的敌人不会产生。我试着让敌人以对角线的方式移动,但也能像一个自上而下的弹跳球一样从墙上弹下来。我也试着每10秒产生一个新的敌人,但是当我运行程序时什么都没有出现,也没有错误。有人能帮忙吗
import pygame
pygame.init()
import random
import time
inPlay = True
width=900
height=700
screen = pygame.display.set_mode((width, height))
#enemy
enemyFrequency=10
enemyPause=enemyFrequency
killEnemy=True
#------------------------------#
# classes #
#------------------------------#
######################################################
class Enemy(pygame.sprite.Group):
def __init__(self,ballX,ballY,ballSpeed,picture2=None):
pygame.sprite.Group.__init__(self)
self.ballX=ballX
self.ballY=ballY
self.ballSpeed=ballSpeed
self.image2=pygame.image.load(picture2)
def move(self):
for enemys in self:
self.ballX+=self.ballSpeed
self.ballY+=self.ballSpeed
def decay(self):
for enemys in self:
if enemys.y > height:
self.remove(enemys)
#------------------------------#
# functions #
#------------------------------#
def redraw_game_window():
screen.fill((30, 30, 30))
enemys.draw(screen)
pygame.display.update()
#------------------------------#
# main program #
#------------------------------#
RB=width-player.rect.width
CEILING = 3*player.rect.height # for ship movement
FLOOR = height - player.rect.height #
#enemy
enemies=pygame.sprite.Group()
enemySpeed=3
eX=random.randint(0,RB)
eY=random.randint(-height,0)
enemys=Enemy (eX,eY,enemySpeed,'asteroid.png')
t0 = pygame.time.clock()
dt = 0
enemyCount = 0
clock = pygame.time.Clock()
while inPlay:
redraw_game_window()
for event in pygame.event.get():
if event.type == pygame.QUIT:
inPlay=False
#enemies spawning
if dt < nSeconds:
t1 = time.process_time()
dt = t1 - t0
enemies.add(enemys)
else:
enemyInstance = Enemy()
enemyCount += 1
t0 = time.clock()
dt = 0
enemys.move()
enemys.decay()
clock.tick(30)
pygame.quit()
我对你的代码进行了黑客攻击,使它看起来像是在做代码描述的事情,什么符合你的问题。这段代码中缺少了很多东西,也许你在发布到之前就把它们删掉了,这样代码就更短了
问题的关键是如何对付敌人的精灵。我不知道它是不是设计出来的,但是最初的代码定义了一个看起来像精灵的东西,但是基于一个精灵组
因此,我基于
enemies
应该是一个全局sprite组的想法修改了代码,并从那里“修复”了一些东西。没有定义Player
类,我添加了一个。我无法遵循计时代码,它使用pygame.time.clock()
(这是一个对象)作为时间值。好像这段代码保留了一个delta,我得重新编写这段代码才能让它正常工作,我很抱歉我想做的另一个注释-sprites可以定义一个
update()
函数。此函数应处理精灵的位置更改和外观。PyGame精灵组将在精灵组update()
元调用中自动处理此函数的调用(如果已定义)。这为程序提供了一种干净而简单的方法来处理sprite动画相关问题 更多 >
编程相关推荐