所以我对编程很陌生,但是现在使用python和pygame,我试图创建一个小游戏。这很简单,玩家将四处移动避开小型射弹。但是我在创建很多物体时遇到了麻烦,例如我需要为新的射弹随机生成一个位置和速度,我如何创建这样的物体,以及当它们真正去的时候。离开屏幕'他们应该消失。 所以我也需要删除它们。我的第一个想法是创建一个对象列表,我和一个在更新屏幕之前逐个移动它们的循环,但是我如何创建具有不同名称的新对象,而我不知道有多少个射弹将是在屏幕上,它应该是随机的。
class Projectiles:
ProjectilesCount = 0
def __init__(self, x, y, speed):
self.pos = (x,y)
self.speed = speed
Projectiles.ProjectilesCount += 1
def moveProj(self):
x, y = self.pos
x -= self.speed
self.pos = (x,y)
pygame.draw.line(DISPLAY, WHITE, self.pos, (x,y+self.SIZE), self.SIZE)
bullet = Projectiles(500,200,5)
bullet.SIZE = SIZE
while true:
# some stuff
bullet.moveProj()
pygame.display.update()
fpsClock.tick(FPS)
这是我现在使用的课程(它只是向左),它只适用于一个射弹。
答案 0 :(得分:1)
你想要一个清单:
list_of_bullets = []
for i in range(100):
list_of_bullets.append(Projectiles(...))
答案 1 :(得分:0)
使用词典。列表将起作用,但是当使用订单不重要的对象时,请使用词典。在迭代其中的大量数据时,字典也表现得更好。使用类似下面的代码...
bulletdict = {}
#This is a list because we can change the value within a function without returning it
#You could also use a global variable instead of a list
bulletcount = [0]
def SpawnBullet(bulletdict,bulletcount):
bulletdict[bulletcount] = Projectiles
bulletcount[0] += 1
密钥将是一个数字,值将是子弹本身。迭代字典来更新内容...
for item in bulletdict:
bulletdict[item].moveproj(...)
如果你需要删除东西,请使用与此类似的代码。我通常在我的对象中有'checkDelete'函数,我可以调用它来检查是否应该删除它们。这用于删除对象,如果它们离开屏幕或与某些东西发生碰撞。
def deleteObjects(objectdict):
deletelist = []
for item in objectdict:
if objectdict[item].checkdelete() == True:
deletelist.append(item)
for item in deletelist:
del objectdict[item]
这样可以方便地使用和迭代对象。您始终可以告诉最后生成的对象,因为它将具有最高的数字作为键。如果您需要,此密钥编号还将告诉您生成的对象的总数。 我希望这能帮助你,祝你好运。