在Python

时间:2017-05-01 20:03:23

标签: python python-3.x pygame python-3.5

我正在使用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()

我还没有听说过这个问题的真正简单解决方案吗?

3 个答案:

答案 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()检测退出,但您可以直接检查坐标或其他任何内容。