我正在構建一個遊戲並嘗試使用事件系統。 這是它是如何實現的主要思路:C中的遊戲事件處理系統#
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Blocker2
{
public delegate void OnPlayerMoved(PlayerMovedEvent e);
public delegate void OnPlayerSpawned(PlayerSpawnedEvent e);
public delegate void OnBlockBreak(BlockBreakEvent e);
public delegate void OnBlockPlaced(BlockPlacedEvent e);
public static class EventHandler
{
private static List<OnPlayerMoved> _onPlayerMoved;
private static List<OnPlayerSpawned> _onPlayerSpawned;
private static List<OnBlockBreak> _onBlockBreak;
private static List<OnBlockPlaced> _onBlockPlaced;
static EventHandler()
{
}
public static void Subscribe()
{
}
// -------------------------- Player Related Events --------------------------
public static void OnPlayerMoved(PlayerMovedEvent e)
{
foreach (OnPlayerMoved del in _onPlayerMoved)
{
del(e);
}
}
public static void OnPlayerSpawned(PlayerSpawnedEvent e)
{
foreach (OnPlayerSpawned del in _onPlayerSpawned)
{
del(e);
}
}
// -------------------------- Block Related Events --------------------------
public static void OnBlockBreak(BlockBreakEvent e)
{
foreach (OnBlockBreak del in _onBlockBreak)
{
del(e);
}
}
public static void OnBlockPlaced(BlockPlacedEvent e)
{
foreach (OnBlockPlaced del in _onBlockPlaced)
{
del(e);
}
}
}
}
而且有將是很多更多的事件,我認爲這種方法將會使代碼非常非常複雜。有更好的方法來做到這一點? (考慮代碼的性能和可維護性)。 感謝先進! 對不起,我的英語不好。
爲什麼不使用'eventHandler <>'? 'EventHandler'是一個MulticastDelegate,所以你不需要維護自己的列表。 – JeffRSon 2013-05-06 16:15:06
是不是有沒有使用'event'關鍵字並使用標準C#事件的原因?此外,讓您的活動可以從任何地方公開開火併不是最好的主意。最好是讓班級內的事件實際上解除他們,所以只有這樣做纔有責任。 – Servy 2013-05-06 16:15:09
爲什麼不[[MonoGame]](http://monogame.codeplex.com/)? – Romoku 2013-05-06 16:15:22