PureMVC实例入门

看完了PureMVC的源码,学习的官方的示例,就该自己整个demo出来了。我用它来实现一个非常简单的小游戏。一个小车(就是长方形),用键盘的左右方向键控制它的转向,向上键控制前进。

大概的效果图如下:

第一步,新建包目录,包括controller,model和view,view下面有个子package components。(见上图左半部分)

第二步,编写ApplicationFacade。里面初始化StartupCommand

    override  protected  function initializeController (  )  :  void 
     {
       super .initializeController ( ) ;            
      registerCommand ( STARTUP , StartupCommand  ) ;
     }
    
     public  function startup (  stage : Object  ) : void
     {
      sendNotification ( STARTUP ,  stage  ) ;
     }

第三步,编写StartupCommand,里面初始化小车的视图,注册相关的Mediator

public  class StartupCommand  extends SimpleCommand implements ICommand
   {
    override  public  function execute (notification :INotification ) : void {
       var  stage : Stage = notification .getBody ( )  as  Stage ;
      facade .registerMediator ( new StageMediator ( stage ) ) ;
      
       var car :Car =  new Car ( ) ;
      facade .registerMediator ( new CarMediator (car ) ) ;
      
       stage . addChild (car ) ;
     }
   }

第四步,编写小车的视图类Car,里面设计了相关键盘按下的操作变量,在EnterFrame里面更新小车的状态

     private  function updatePos (evt : Event ) : void {
       if (leftArrow ) {
         this . rotation  -= TURN_SPEED ;
       } else  if (rightArrow ) {
         this . rotation  += TURN_SPEED ;
       } else  if (upArrow ) {
         var  angle : Number =  Math . PI * ( this . rotation / 180 ) ;
         var dx : Number = FORWARD_SPEED * Math . cos ( angle ) ;
         var dy : Number = FORWARD_SPEED * Math . sin ( angle ) ;
         this . x +=dx ;
         this . y +=dy ;
       }
     }

第五步,编写小车的Mediator CarMediator,里面监听键盘事件更新后的Notification,然后更新Car的相关变量

    override  public  function handleNotification (notification :INotification ) : void {
       switch (notification .getName ( ) ) {
         case ApplicationFacade .TURN_LEFT :
          car .leftArrow =  true ;
           break ;
         case ApplicationFacade .TURN_RIGHT :
          car .rightArrow =  true ;
           break ;
         case ApplicationFacade .FORWARD :
          car .upArrow =  true ;
           break ;
        
         case ApplicationFacade .STOP_TURN_LEFT :
          car .leftArrow =  false ;
           break ;
         case ApplicationFacade .STOP_TURN_RIGHT :
          car .rightArrow =  false ;
           break ;
         case ApplicationFacade .STOP_FORWARD :
          car .upArrow =  false ;
           break ;
       }
     }

第六步,编写舞台的Mediator -StageMediator,里面监听键盘按下事件,然后发送相关的Notification

     private  function handleKeyDown (evt : KeyboardEvent ) : void {
       switch (evt . keyCode ) {
         case  Keyboard . LEFT :
          sendNotification (ApplicationFacade .TURN_LEFT ) ;
           break ;
         case  Keyboard . RIGHT :
          sendNotification (ApplicationFacade .TURN_RIGHT ) ;
           break ;
         case  Keyboard . UP :
          sendNotification (ApplicationFacade .FORWARD ) ;
           break ;
       }
     }
    
     private  function handleKeyUp (evt : KeyboardEvent ) : void {
       switch (evt . keyCode ) {
         case  Keyboard . LEFT :
          sendNotification (ApplicationFacade .STOP_TURN_LEFT ) ;
           break ;
         case  Keyboard . RIGHT :
          sendNotification (ApplicationFacade .STOP_TURN_RIGHT ) ;
           break ;
         case  Keyboard . UP :
          sendNotification (ApplicationFacade .STOP_FORWARD ) ;
           break ;
       }

用了puremvc后,感觉代码间的耦合性低了,便于管理。不过用的过程中还是存在很多问题了,可以参考一下官方的那份《最佳实践》文档,里面提供了一些好的建议。

转载于:https://www.cnblogs.com/tinytiny/archive/2012/05/31/2528044.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值