如何记住一个房间已被清除? AS3,FP

时间:2015-02-01 18:10:28

标签: actionscript-3 flash flash-builder

我是AS3的新手并且编码一般,所以这就是我提出这个问题的原因。我试图制作一个像半程序生成的地下城爬行器,就像使用flashbuilder和flashpunk绑定isaac一样。

但是这给我留下了一个问题;我找到了两种方法来做房间。要么我可以一次产生所有的房间,让玩家在他们之间使用门实体来阻止进度,或者我可以加载一个包含其中房间的新世界,而不使用FP.world = new world。但这给了我两个问题所以基本上这是我想知道的主要问题。

我希望世界记住它里面的东西以及即使我进入一个新世界也会被杀死的东西。例如。现在,如果我进入一个新的世界,它将把这个世界加载到新的然后如果我杀死所有的敌人并离开然后重新进入它将再次产生所有的敌人。我需要知道如何让那个房间记住它已被清除敌人。

有没有这样做?

1 个答案:

答案 0 :(得分:0)

我不熟悉FP,所以我不知道FP是否允许保存房间状态。您最好查看文档,但如果它没有帮助,您可以执行以下操作:

  1. 找一种方法以某种方式获得房间的唯一ID。它可以是任何东西 - 坐标,数字,名称,对象等。请确保它是唯一的。一旦你拥有它,继续。
  2. 您需要的下一个强制性事项是获取和设置房间状态的方法。即获得州后,你可以知道一个房间里有三个地精。设置状态就像"删除所有并将这三个哥布林放在这个房间里#34;。这些要求很自然,因为无论如何你都要读写房间的内容。一旦你拥有它,其余的很容易。
  3. 选择保持状态的方式。让我们说一个像{goblins:3,chest:1}这样的对象。如果你杀死一个地精,它将成为{goblins:2,chest:1}。如果你只想记住被彻底清除的房间,那么你只需要一个布尔变量(真/假)作为状态对象。
  4. 您可以将状态对象存储在字典中作为键值对,其中键是房间的唯一ID。
  5. var visited_rooms:Dictionary = new Dictionary();
    var roomID = ... // unique room id
    var savedState:Object = { goblins:3, chest:1 } // read room state somehow
    visited_rooms[roomID] = savedState;
    

    现在,离开房间后,您将获得州信息并将其放入字典中。

    再次进入此房间后,只需检查字典中是否存在唯一ID,如果是,则恢复状态:

    var roomID = ... // unique room id
    if (roomID in visited_rooms) {
       var savedState:Object = visited_rooms[roomID];
       room.setState(savedState);
    }
    

    基本上都是。