0

我目前正在研究 Roguelike,其中我有多个不同的事件队列(以向量的形式),它们处理多个不同的事件类别。或者更确切地说,不同的游戏对象有自己的私有事件队列。

在地图图块数据中,我有一个特殊的触发器结构,当玩家(或其他任何东西)进入图块时会激活它。此图块结构提供用于生成事件标志的数据,然后需要将其放置到适当的事件队列中。

瓦片结构如下:

struct tile{
  int t_type;
  trigger t_dgram;

  vector<actor*> occupied;
  vector<item*> loot;
public:
  void trigger_tile(int ns, int we, );
};

触发器结构本身可以保存用于确定哪个队列是合适队列的信息,但是为地图中的每个图块保存指向所有可能事件队列的指针是不可行的,特别是当我让地图动态生成无限地图的地形时.

所以问题是双重的:在调用函数时将向量转换为 void 指针是否是个好主意:

void tile :: trigger_tile(int ns, int we, void *queue_ob);

对象本身将tile能够确定正确的队列向量类型并使用trigger t_dgram成员变量取消引用 void 指针,但这是个好主意吗?这有什么我不知道的危险吗?

您个人如何建议我达到类似的效果?

感谢您的时间。

4

2 回答 2

1

“触发器”对我来说听起来像是一门课。

struct Trigger {
    virtual void triggeredOn(tile *tile) = 0;
}

然后tile有一个指向其触发器的指针:

struct tile{
  ...
  ...
  Trigger *trigger;
  void trigger_tile(int ns, int we, ){trigger.triggeredOn(this)};
};

现在派生的类Trigger可以保存指向任何队列的指针,甚至可以做一些不涉及队列的事情。

于 2017-07-27T15:14:37.410 回答
0

所以问题是双重的:在调用函数时将向量转换为 void 指针是否是个好主意:

不,这听起来不对。也许您打算将向量的指针转换为 a void*,只要使用转换的下游函数void*在访问向量的元素之前返回向量指针,就可以了。

于 2017-07-27T15:05:25.353 回答