我正在使用python3和pygame开发我非常简单的游戏项目,这是我首先添加的一个,我正在尝试生成一个每隔X秒就会掉落到屏幕上的块。该块是一个类对象(由于多种原因),我无法掌握创建新对象的概念以及如何在以后调用它们的函数。我显然不能只调用名称为block1,block2,block3等的1000个对象,等等,那么我该如何处理这个问题?
这是一个非常简单的游戏循环,我正在运行:
player = Player()
block = Block()
gameExit = False
while not gameExit:
dt = clock.tick(fps)
timePassed += dt
gameDisplay.fill(black)
player.update()
block.update()
blockspawner = (4 / velocity) * 1000
velocity += 0.001
if timePassed > blockspawner:
#this is where i'd create my new Block() object
timePassed = 0
pygame.display.update()
我还没有听说过这个问题的真正简单解决方案吗?
答案 0 :(得分:2)
无需创建无限对象。只需创建一个存储对象的列表即可。此外,您还必须创建一些方法来删除不再使用的块。一种方法是检查块何时从屏幕中移出并删除它或用户不可见。
答案 1 :(得分:1)
您可以创建块对象列表。
block_list.append(Block())
答案 2 :(得分:0)
每次拨打Block()
时,都会创建一个新对象。因此,在主循环中放置一个像block = Block()
这样的对象创建语句,只要循环运行,你就可以拥有无限的新对象。如果它永远运行,你将拥有“无限”的对象。
您需要做更多工作,这样您一次可以拥有多个对象。例如,您可以将它们保存在列表中。从第一个块开始:
blocks = [ Block() ]
现在运行游戏。无论何时出现新块,都要在列表末尾添加一个。块将累积,直到您开始删除它们。如果它们都以相同的速度移动,那么它是最简单的:当您检测到最旧的块(始终位于0位置)已离开屏幕区域并且必须被丢弃时,请移动列表。
while not gameExit:
# do game stuff, e.g. display and keeping track of screen positions
if add_a_block:
blocks.append(Block())
if out_of_bounds(blocks[0]):
blocks = blocks[1:]
您如何决定何时添加或删除块取决于您。该示例假设函数out_of_bounds()
检测退出,但您可以直接检查坐标或其他任何内容。