2017-07-27 68 views
0

我目前正在研究一個Roguelike,其中有多個不同的事件隊列(以向量的形式),它處理多個不同的事件類別。或者說,不同的遊戲對象有自己的私人事件隊列。將多個向量投射到void *

在地圖瓦片數據中,我有一個特殊的觸發器結構,當玩家(或其他任何東西)進入瓦片時激活。該圖塊結構提供用於生成事件標誌的數據,然後該標誌需要放置到適當的事件隊列中。

瓦片結構如下:

struct tile{ 
    int t_type; 
    trigger t_dgram; 

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

觸發結構本身可以用於確定哪個隊列中合適的一個保存信息,但它是不可行的保持指針的所有可能的事件隊列中的每一個瓦地圖,特別是我有地圖動態地生成無限地圖的地形。

所以現在的問題是雙重的:難道是在調用函數時投下向量空指針是一個好主意:

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

tile對象本身就能夠確定正確的隊列矢量型並使用trigger t_dgram成員變量取消引用void指針,但這是個好主意嗎?有沒有我不知道的這種危險?

你個人認爲我會達到類似的效果嗎?

謝謝你的時間。

+1

它不可能有一個單一的事件隊列,其中實際的事件可以是不同的類型? 'struct Event {}; struct ActorEvent:public Event {}; ...'。然後將所有內容存儲在單個'std ::隊列事件'中。但是,這可能與您計劃使用它們的方式正交。 – pingul

+0

@pingul其實我已經想到了。不走這條路線的主要原因是許多事件導致實體不得不查詢其他對象並等待額外處理的結果。可悲的是,擁有一個隊列會導致太多的性能問題。而且,不同標誌的服務通常需要由具有不同訪問權限的不同對象處理,並且具有單個處理程序類最終導致靈活性問題。 :「d – Druid

回答

0

所以現在的問題是雙重的:難道是在調用函數時投下向量空指針是一個好主意:

不,不健全的權利。也許你打算把一個指針指向一個void*,只要在訪問矢量的元素之前使用void*強制轉換的下游函數返回到矢量指針,這將是OK。

1

「觸發器」聽起來像一個類給我。

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

然後tile有一個指針指向其觸發:從Trigger衍生可容納指向任何隊列,甚至做一些事情,不涉及隊列

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

現在班。