【问题标题】:How to make a new object while the program is running (Python, pygame)如何在程序运行时创建一个新对象(Python、pygame)
【发布时间】:2021-01-26 00:30:08
【问题描述】:

我目前正在制作 2048,但每次移动时都无法创建新块。

我做了一个列表来存储所有的块,在列表中有对象:

class Blocks:
   ~~~~~~~ code ~~~~~~~~~

block1 = Blocks()
block2 = Blocks()
block_list = [block1, block2] 

问题是在预先编写块时它可以完美运行,但是在游戏已经运行时我无法制作新块,有什么办法吗?提前谢谢你,注意安全:)

【问题讨论】:

  • 请注意,block1 = Blocks() 已经在程序运行时创建了 Blocks 类的实例。你在每一步都做类似的事情。
  • 澄清一点,Blocks 类代表什么?是屏幕上的所有块吗?或者它只是一个块?如果是这样,我建议从类名的末尾删除“s”。
  • @Code-Apprentice "Blocks" 是一个代表一个块的类,在一个列表中,该类的对象可以填满屏幕。我一定会接受您删除“s”的建议,非常感谢您!但我仍然不知道如何在程序已经运行时将对象添加到列表中,我知道我需要“.append”一些东西,但我不确定如何。
  • 正如下面的答案所示,您创建一个新的Blocks 对象,就像您对前两个对象所做的那样,然后将该对象附加到列表中。

标签: python list class object pygame


【解决方案1】:

我不明白为什么这是不可能的。您应该能够简单地将一个新块附加到您的 block_list:

block_n = Blocks()
block_list.append(block_n)

您将其放置在您的游戏循环中,您可以在其中检测何时进行移动。

你在哪里 blit 我假设你通过 block_list 并将所有块 blit 到屏幕上?还要确保始终使用 pygame.display.flip() 更新屏幕。

【讨论】:

    【解决方案2】:
    1. 我想你需要python中的“反射”。反射可以获取实例的类型,在代码运行时创建类型的实例。
    2. 可以从问题Can you use a string to instantiate a class?或者文章Classes and Class Creation中得到一些启发

    【讨论】:

    • 这里不需要反射。类的名称在代码中是已知的,不需要来自字符串。
    猜你喜欢
    • 2014-02-04
    • 2011-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-29
    相关资源
    最近更新 更多