【问题标题】:Multiple instances of an object/class对象/类的多个实例
【发布时间】:2018-04-06 20:32:25
【问题描述】:

我正在用 VBA excel 制作一个简单的游戏,比如 Rogue 或 Nethack。它发生在一个 gui 窗口中。我有一个数组来保存比赛场地等,还有一个玩家类,其中存储了他们的坐标和一些可以移动的潜艇等。

然后我创建了一个随机移动的NPC 类。我以通常的方式声明它,Dim NPC as NPCclass(在声明中)然后Set NPC = New NPCclass(在子中,这似乎是必要的,但没有教程提到这一点?)到目前为止,NPC 代表了通过一个 ASCII 字符并做我想做的事。

但是,现在我想在间隔几圈后创建更多NPCs。但我不知道该怎么做。似乎对于我的NPC 的每一个额外实例,我都必须再做一个Dim NPCxyz as NPCclass

所以我尝试生成一个字符串,比如"npc_name",其中包含要生成的下一个NPC 的名称,如NPC1NPC2 等等。不出所料,如果我然后尝试Dim npc_name As NPCclass VBA 不明白我想创建另一个NPCclass 实例,其中npc_name 中的字符串作为其名称。相反,它认为我想再次声明 npc_name,就像我之前说的 Dim npc_name As String 一样。

如何创建更多使用同一类但在阵列/游戏区域中独立移动的 NPC?我觉得我误解了一些明显的东西,因为我看过的教程都没有涉及到这一点。

【问题讨论】:

  • 你在正确的轨道上。这里的诀窍是,一旦你开始思考“动态命名的变量”,就会想到“数组”或“集合”。您可以拥有一组 NPC 对象或一组 NPC 对象。 See here for a similar question 我个人更喜欢这里的集合,因为它比数组更通用,尽管数组就足够了。

标签: excel vba


【解决方案1】:

您也可以使用收藏

Dim NPC as New NPCclass
Dim colNPC as New Collection

for i = 1 to 20
    colNPC.add New NPC
next

【讨论】:

    【解决方案2】:

    只需创建一个对象数组...

    Dim NPC(1 to 20) as NPCclass
    
    For i = 1 to 20
        Set NPC(i) = New NPCclass
    
        '... your object init ...
        NPC(i).SetSometing = 0
        NPC(i).DoSomething()
    Next i
    

    如果以后你想增加列表,你只需要做类似的事情

    ReDim Preserve NPC(50)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多