【发布时间】:2013-12-26 05:50:35
【问题描述】:
所以我正在阅读一本关于 MVC 的书,作者创建了一个控制器 (PlayerController) 并放置了一些功能供键盘使用,一些功能供鼠标使用。但他只是注释掉每个键盘的使用。
它让我想到了创建 2 个控制器,PlayerMouseController 和 PlayerKeyboardController,这样我就可以决定如何控制播放器更改一行。如果我可以这样设计,以后我可以为使用相同视图和模型但由 AI 控制的怪物添加一个 AIController 等等......
我有我的模型 Player,它可以做物理方面的工作。现在我想要两个控制器,一个用于鼠标,另一个用于键盘。所以我创建了一个 PlayerMouseController 和 PlayerKeyboardController。
PlayerMouseController 有 2 个函数:processUpdate() 和 processMouseDown() PlayerKeyboardController 有 2 个函数:processKeyDown() 和 processKeyUp()
我这样创建对象:
_player = new Player();
_playerController = new PlayerMouseController(_player);
_playerView = new PlayerView(_player, _playerController, stage);
addChild(_playerView);
如果我想更改控制器,我可以为此更改 _playerController 行:
_playerController = new PlayerKeyboardController(_player);
而且效果很好……但我不知道我使用的设计是否适合大型项目
为了完成这项工作,我必须创建一个没有任何内容的 Controller 类,以便我可以扩展其他控制器,并且我的视图可以调用所有方法。
public class Controller
{
public function processKeyDown(e:KeyboardEvent):void
{
}
public function processKeyUp(e:KeyboardEvent):void
{
}
public function processUpdate(stage:Stage):void
{
}
public function processMouseDown(e:MouseEvent):void
{
}
}
在我看来(PlayerView)我接受任何控制器:
public function PlayerView(model:Player, controller:Controller, stage:Stage)
{
_model = model;
_controller = controller;
_stage = stage;
}
我根据它的类型决定使用什么:
if (_controller is PlayerKeyboardController)
{
_stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);
_stage.addEventListener(KeyboardEvent.KEY_UP, onKeyUp);
}
else if (_controller is PlayerMouseController)
{
_model.addEventListener(Model.UPDATE, onUpdate);
_stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
}
// EVENTS PlayerKeyboardController
private function onKeyDown(e:KeyboardEvent):void
{
_controller.processKeyDown(e);
}
private function onKeyUp(e:KeyboardEvent):void
{
_controller.processKeyUp(e);
}
// EVENTS PlayerMouseController
private function onUpdate(e:Event):void
{
_controller.processUpdate(_stage);
}
private function onMouseDown(e:MouseEvent):void
{
_controller.processMouseDown(e);
}
所以...这是个好主意?我应该如何改进??
【问题讨论】:
标签: actionscript-3 model-view-controller