說一個遊戲,我們有實體互相溝通。說一個玩家碰到一個物品,現在該物品應該放在他的std::vector<Item*>
在這裏適合動態演員嗎?
當玩家收到碰撞消息時,他將物品作爲實體*接收。玩家是否適合作爲物品投射,如果投射成功,將物品推入盤點?
即使遊戲給他發了HIT_ITEM消息,他仍然需要投它推入。
感謝
說一個遊戲,我們有實體互相溝通。說一個玩家碰到一個物品,現在該物品應該放在他的std::vector<Item*>
在這裏適合動態演員嗎?
當玩家收到碰撞消息時,他將物品作爲實體*接收。玩家是否適合作爲物品投射,如果投射成功,將物品推入盤點?
即使遊戲給他發了HIT_ITEM消息,他仍然需要投它推入。
感謝
dynamic_cast
可幫助您檢查執行向下轉換時的有效性。
如果指針或引用無法安全地下載,它將返回NULL
或引發異常(引用爲std::bad_cast
)。
除非您向我們展示班級結構,否則不清楚。
如果你能圓滿回答這些問題自己,然後是。
無論如何,不要教條。如果在當前的情況下,沮喪比其他事情更方便,那就去做吧。恕我直言
你應該問自己的主要問題是 - 我可以讓這個實體上的虛函數嗎?在這種情況下,我可能會說「不」,因爲對於非項目知道或關心你將如何處理項目,這是沒有意義的。因此dynamic_cast
可能是正確的解決方案 - 您可以安全地處理返回的null
的情況,並使其他派生類不必知道有關Item的任何內容。
你能舉一個重新設計的例子嗎?我的消息類有一個實體*,這就是爲什麼一切都以這種方式發送。我的Message類應該包含一個指向我遊戲中每個實體類型的指針嗎? – jmasterx
@Milo:不應該。我不知道你的內部。有數百種模式可以達到這些目的 - 每種模式都適用於它自己的情況......但是,就我的經驗而言,就通用消息而言,通常會向下傾斜 –
@Milo:一個例子是與訪問者進行雙重調度用於將物品添加到玩家庫存。搜索「雙重調度」,它應該給你足夠的例子。 – Xeo