1

这个问题与 XNA 4.0 游戏有关,因此它自然会有一个简单的游戏执行循环:

Init()
Load()
Update()
Draw()

等等

我希望使这个循环尽可能干净,我一直在脑海中计划它,我想在实际集成它之前写下我想要完成的事情。委托作为一种方法队列有多实用?

Init()
  initQueue(RequiredArgs)
Load()
  loadQueue(RequiredArgs)

等等

我会根据需要将方法添加到队列中,可能会创建多个委托,因此我不必向我的委托添加 100 个参数并一起执行多个共享相似参数的方法。

4

2 回答 2

3

代表集合(通常是队列)的一般概念没有错。这是消息循环的合理实现。

值得注意的是,如果消息可以从多个线程添加到队列中,则将其BlockingCollection用作队列的集合可能是有意义的,这样对集合的多线程访问就不会出现问题。

具体来说,集合的类型可以是BlockingCollection<Action>. 无需管理允许任何其他代表签名。任何输出都与您无关,也没有任何参数可以提供。如果有人希望调用具有参数的方法,他们可以使用函数来修复参数(可能使用 lambda,例如() => someFunction(param1, param2);)。

于 2013-04-02T21:02:36.663 回答
2

据我了解,您有几个选择。

首先,制作一个List<Action>或其他包含您的代表的列表。这样您就可以通过代表找到自己的方式。

至于参数,您可以:

a) 让它接受一个List, Array, 或params作为输入(这些将是对象类型)。这允许每周定义的无限值输入。您的功能只需要知道哪个是哪个,并希望上帝您插入了正确的功能。我不会推荐这个,除非你不能这样做......

b)创建一个基本抽象类,用作Base Settings所有委托函数调用。然后为每个需要特定事物的委托创建专门的继承类。这可能更耗时,但从长远来看是值得的(为了维护和可读性)。

于 2013-04-02T20:55:49.817 回答