1

出于爱好,我正在制作游戏。游戏中有一个怪物追逐人类(类似吃豆人)。当吃豆人被卡住时,可以吃人或做一些动作;应该提出一个事件。这是因为我的程序变成了非循环,因为所有对象都必须相互了解,内聚有什么不好。

有一个类似对象(称为游戏)的控件,它应该响应事件;人类感动,怪物感动,人类吃掉,怪物卡住,最终让视图知道发生了什么事,所以它重新绘制。还有一点是,视图响应演员的按键,并且这些事件应该以某种方式(也通过事件)到达人类。

  1. 有人可以帮助我如何最好地解决这个问题吗?我已经在互联网上搜索了类似的问题,但没有遇到任何问题。

  2. 在 MVC 中:控制器知道视图吗?如果是这样:整个程序是从控制器开始还是从视图开始?(是什么造就了谁)

4

2 回答 2

1

基本上事件处理机制只是一种生产者-消费者模式,假设您正在生产一些事件(一个动作)并且有一组需要通知您的动作的侦听器。

是否要使用 Java 内置事件处理取决于你已经编写了多少代码,如果重构代码以使用 Java 事件处理需要很多努力,并且你只有有限的一组事件,那么您可以编写自己的消息传递系统。但显然,应该优先使用 Java 事件处理机制,因为它负责通知所有为该事件注册的侦听器,您不必担心通知每个侦听器,以后如果有任何问题,它将帮助您调试错误的。我希望它能回答你的第一个问题

简而言之,您可以编写自己的事件,例如 HumanMovedEvent、MonsterMovedEvent 等。

回到你的第二个问题,是的,在 MVC 中,控制器知道它需要为任何特定操作触发的所有视图。控制器可以为任何特定操作选择任何特定视图,假设您执行某些操作 A,您可以调用视图 V。

是的,您的程序首先从您的 UI 向控制器发送请求。然后控制器选择它需要为该特定操作呈现的视图。

我希望我说清楚了:)

于 2011-12-21T20:40:16.657 回答
0

在 MVC 中,控制器知道模型对象和视图。模型对象不知道谁在控制它,同样,视图也不知道。模型和视图通常通过回调与控制器进行通信:模型为各种回调方法定义了一个接口,并有一个“委托”实例变量持有指向该接口的指针。控制器将自己设置为模型上的委托。对于视图也是如此。除了回调,您还可以按照您的建议使用事件,这将增加一层额外的解耦:

  • 模型可以有多个事件监听器,而不仅仅是控制器
  • 如果控制器也使用事件与模型通信,那么控制器根本不需要知道模型,只需要知道事件。

通常,您的程序中的每个对象都会有一个模型-视图-控制器组合(一个怪物模型、怪物视图和怪物控制器)。但是您也可以让一个控制器管理多个模型对象和/或视图。这在一定程度上取决于您使用的 UI 框架,哪种方法最实用。

您的第二个问题还取决于您使用的 UI 框架。通常,控制器会实例化视图,但有些框架的做法不同。

对于您提到的键盘键:通常,视图会通知控制器按下“ctrl-K”的键,控制器会将其转换为模型对象“向上移动 1 个空间”的命令。

于 2011-12-21T21:31:42.420 回答