码迷,mamicode.com
首页 > 其他好文 > 详细

AS3步进器

时间:2016-07-22 14:51:50      阅读:218      评论:0      收藏:0      [点我收藏+]

标签:as3 步进器

写步进器的时候,一般要求TextField也能支持输入,而且是大于等于0的有意义的数字 , 比如 "01"就是不行的.在这里需要介绍一点知识 , (本着不知道知道,知道理解的宗旨)

    事件 :

                TextEvent.TEXT_INPUT

                Event.CHANGE

                首先 , TextEvent.TEXT_INPUT : 有文字将要输入 , 而且是一个一个的输入(待会解释)

                          Event.CHANGE : 文本输入后触发

                

                对于 : TextField , 有一个只读的属性 : careIndex , 其意义是 : 光标插入点位置的索引

 

好了 , 上一个步进器的是实现:

 package com.niuniu.module.room.view.item
{
 import com.game.common.Config;
 import com.game.common.GameUtil;
 import com.game.common.StageInfo;
 import com.game.moduleBase.view.BaseView;
 import com.game.moduleCall.ModuleCallManger;
 import com.game.ui.layer.LayerManager;
 import com.game.ui.layer.LayerType;
 import com.game.ui.reslib.ResLib;
 import com.niuniu.GameEventTypeStr;
 import com.niuniu.common.UserManager;
 
 import flash.display.SimpleButton;
 import flash.display.Sprite;
 import flash.events.Event;
 import flash.events.MouseEvent;
 import flash.events.TextEvent;
 import flash.text.TextField;
 import flash.text.TextFieldType;
 
 import tw.ui.AlertDialog;
 /**
  * 带入筹码Panel
  * @author Kayer
  * */
 public final class BuyChipsPanel extends BaseView
 {
  private var $btnClose : SimpleButton;
  private var $btnMinus : SimpleButton;
  private var $btnPlus : SimpleButton;
  private var $btnSure : SimpleButton;
  private var $labValue : TextField;
  
  private var $bgMask:Sprite;//背景遮罩
  private var $isMask:Boolean;
  
  private var $stepOff : uint = 1;
  /**本次最多能购买的筹码数*/
  private var $maxBuyingChips : uint = 0;
  /**文本*/
  private var $text : String;
  /**
   * @param $isMask : 是否是模态
   * @param $stepOff : 步进器步长
   * */
  public function BuyChipsPanel( $isMask : Boolean = true , $stepOff : uint = 1 )
  {
   this.$isMask = $isMask;
   this.$stepOff = $stepOff;
   this.$maxBuyingChips = Config.maxChipsBuyWhthMoBean( UserManager.instance.mySelfMoBean );
   super();
  }
  override protected function initDis():void
  {
   if( this.$isMask )
   {
    this.$bgMask = new Sprite();
    LayerManager.instance.getLayer(LayerType.LAYER_POPUP_DIALOG).addChild(this.$bgMask);
   }
   this._mc = ResLib.getMovieClip(‘com.niuniu.module.room.BuyChips‘);//com.niuniu.module.room.ROOM_VIEW
   this.addChild( this.mc );
   this.$btnClose = this.mc["btnClose"];
   this.$btnMinus = this.mc["btnMinus"];
   this.$btnPlus = this.mc["btnPlus"];
   this.$btnSure = this.mc["btnSure"];//btnSure
   this.$labValue = this.mc["labValue"];
   this.$labValue.type = TextFieldType.INPUT;
//   this.$labValue.mouseEnabled = false;
   this.$labValue.text = "0";
   super.makeEnabled( true );
  }
  override public function onStageResizeListener(e:Event):void
  {
   if( this.$isMask )
   {
    if ( this.$bgMask != null ) {
     this.$bgMask.graphics.clear();
     this.$bgMask.graphics.beginFill( 0x000000 , 0.2 );
     this.$bgMask.graphics.drawRect(0,0,StageInfo.STAGE.stageWidth,StageInfo.STAGE.stageHeight);
     this.$bgMask.graphics.endFill();
    }
   }
   this.setXY( (StageInfo.WIDTH - this.width ) >>1 , ( StageInfo.HEIGHT - this.height ) >>1 );
  }
  override protected function initEvent():void
  {
   this.$btnClose.addEventListener( MouseEvent.CLICK , onClickHandler );
   this.$btnMinus.addEventListener( MouseEvent.CLICK , onClickHandler );
   this.$btnPlus.addEventListener( MouseEvent.CLICK , onClickHandler );
   this.$btnSure.addEventListener( MouseEvent.CLICK , onClickHandler );
   this.$labValue.addEventListener( TextEvent.TEXT_INPUT , onChipsNumChange );
   this.$labValue.addEventListener( Event.CHANGE , onChipsNumChangeA );
   StageInfo.STAGE.addEventListener(Event.RESIZE, onStageResizeListener);
  }
  override protected function removeEvent():void
  {
   this.$btnClose.removeEventListener( MouseEvent.CLICK , onClickHandler );
   this.$btnMinus.removeEventListener( MouseEvent.CLICK , onClickHandler );
   this.$btnPlus.removeEventListener( MouseEvent.CLICK , onClickHandler );
   this.$btnSure.removeEventListener( MouseEvent.CLICK , onClickHandler );
   this.$labValue.removeEventListener( TextEvent.TEXT_INPUT , onChipsNumChange );
   this.$labValue.removeEventListener( Event.CHANGE , onChipsNumChangeA );
   StageInfo.STAGE.addEventListener(Event.RESIZE, onStageResizeListener);
  }
  private function onClickHandler( $e : MouseEvent ) : void
  {
   switch( $e.target.name )
   {
    case "btnClose":
     this.destroy();
     break;
    case "btnMinus":
     trace("btnMinus");
     this.stepHandlder( - this.$stepOff );
     break;
    case "btnPlus":
     trace("btnPlus");
     this.stepHandlder( this.$stepOff );
     break;
    case "btnSure":
     trace("btnSure");
     this.onSure();
     break;
   }
  }
  private function onChipsNumChange( $e : TextEvent ) : void
  {
   if(  this.$labValue.text.substr(0,1) == "0" && ($e.currentTarget as TextField).caretIndex > 0 )
   {
    this.$text = this.$labValue.text;
   }
   else
   {
    if( isNaN( Number($e.text)  ) )
     this.$text = this.$labValue.text;
    else if( int( $e.text ) == 0 ) 
    {
     if( ($e.currentTarget as TextField).caretIndex == 0 )
      this.$text = this.$labValue.text;
     else
      this.$text = "";
    }
    else
     this.$text = "";
   }
  }
  private function onChipsNumChangeA( $e : Event ) : void
  {
   if( this.$text != "" )
    this.$labValue.text = this.$text;
   else
   {
    var buffer : Number = Number( this.$labValue.text );
    if( buffer > this.$maxBuyingChips )
     this.$labValue.text = this.$maxBuyingChips.toString();
   }
  }
  /**
   * 显示
   * */
  public function show() : void
  {
   onStageResizeListener(null);
   LayerManager.instance.getLayer(LayerType.LAYER_POPUP_DIALOG).addChild(this);
  }
  /**
   * 处理兑换
   * */
  private function onSure() : void
  {
   if( uint( GameUtil.trim(this.$labValue.text ) ) <= 0 )
   {
    AlertDialog.createWarnWin( "" , "请重新设置兑换数额!", 0 , AlertDialog.VIEWOK , function( $e :  String ) : void{  } , true );
   }
   else
   {
    ModuleCallManger.disE( GameEventTypeStr.NOTYFY_MAGICBEAN_2_CHIPS_REQ , uint( GameUtil.trim(this.$labValue.text ) ) );
    this.destroy();
   }
  }
  /**
   * 实现步进器算法
   * @param $off : (+- 步进器步长)
   * */
  private function stepHandlder( $off : int ) : void
  {
   var buffer : Number = Number( this.$labValue.text ) + $off;
   if( buffer >= 0 )
   {
    if( buffer <= this.$maxBuyingChips )
     this.$labValue.text = buffer.toString();
    else
    {
     this.$labValue.text == this.$maxBuyingChips.toString();
    }
   }
  }
  override protected function removeDis():void
  {
   if( this.$isMask )
   {
    if( this.$bgMask != null )
    {
     LayerManager.instance.getLayer(LayerType.LAYER_POPUP_DIALOG).removeChild(this.$bgMask);
     this.$bgMask = null;
    }
   }
  }
  override public function destroy():void
  {
   super.destroy();
  }
 }
}

 

        现在需要解释 :       TextEvent.TEXT_INPUT   , 一个一个的输入"woshi"时

技术分享

第一次获取 : "w" , 第二次获取 "o" , 由于TextEvent.TEXT_INPUT : 有文字将要输入 ( target(TextField)的值没变,光标没变 ) ,所以 , careIndex 一直是1(在默认值"0"的后面输入)

 


技术分享

技术分享


 

本文出自 “Better_Power_Wisdom” 博客,转载请与作者联系!

AS3步进器

标签:as3 步进器

原文地址:http://aonaufly.blog.51cto.com/3554853/1828728

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!