Java 在这种情况下,我需要自定义事件吗?

Java 在这种情况下,我需要自定义事件吗?,java,model-view-controller,events,cohesion,Java,Model View Controller,Events,Cohesion,出于爱好,我正在做一个游戏。游戏中有一个怪物在追逐人类(像吃豆人一样)。当吃豆人被卡住时,可以吃人或做一些动作;应该提出一个事件。这是因为我的程序不是面向对象的,因为所有的对象都必须相互知道什么对内聚没有好处 有一个类似控件的对象(称为游戏),它应该响应事件;人类移动,怪物移动,人类吃掉,怪物卡住,最终让视图知道发生了什么,所以它重新绘制。还有一点是,视图对参与者的按键做出响应,并且这些事件应该以某种方式(也通过事件)到达人类 有人能帮我解决这个问题吗?我在网上搜索过类似的问题,但没有发现 在M

出于爱好,我正在做一个游戏。游戏中有一个怪物在追逐人类(像吃豆人一样)。当吃豆人被卡住时,可以吃人或做一些动作;应该提出一个事件。这是因为我的程序不是面向对象的,因为所有的对象都必须相互知道什么对内聚没有好处

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

  • 有人能帮我解决这个问题吗?我在网上搜索过类似的问题,但没有发现

  • 在MVC中:控制器是否知道视图?如果是:整个程序是从控制器开始还是从视图开始?(何谓谁)


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

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

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

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

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


    我希望我说得很清楚:)

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

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

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

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

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


    我希望我说得很清楚:)

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

    • 模型可以有多个事件监听器,而不仅仅是控制器
    • 如果控制器还使用事件与模型通信,那么控制器根本不需要了解模型,只需要了解事件
    通常,程序中的每个对象都有一个模型-视图-控制器组合(一个怪物模型、怪物视图和怪物控制器)。但也可以使用一个控制器管理多个模型对象和/或视图。这在一定程度上取决于您使用的UI框架,即哪种方法最实用

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


    对于您提到的键盘键:通常视图会通知控制器按下了“ctrl-K”键,控制器会将其转换为模型对象“向上移动1个空间”的命令。在MVC中,控制器同时了解模型对象和视图。模型对象不知道谁在控制它,同样,视图也不知道这一点。模型和视图通常通过回调与控制器进行通信:模型为各种回调方法定义了一个接口,并具有一个“委托”实例变量,其中包含指向该接口的指针。控制器将自身设置为模型上的代理。这一观点也是如此。 您还可以按照建议使用事件,而不是回调,这将增加额外的解耦层:

    • 模型可以有多个事件监听器,而不仅仅是控制器
    • 如果承包商