您的位置:首页 > 其它

AS3步进器

2016-07-22 11:57 513 查看
写步进器的时候,一般要求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 : 是否是模态
* */
public function BuyChipsPanel( $isMask : Boolean = true )
{
this.$isMask = $isMask;
this.$stepOff = Config.exchangeStep
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":
if( UserManager.instance.getSelf().score > 0 )
this.destroy();
else
AlertDialog.createWarnWin( "" , "您的筹码不足,请先购买筹码!", 0 , AlertDialog.VIEWOK , function( $e :  String ) : void{  } , true );
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 )
{
if( !isNaN( Number($e.text)  ) )
this.$text = $e.text;
else
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();
if( this.$maxBuyingChips == 0 )
{
AlertDialog.createWarnWin( "" , "魔豆不足,请充值!", 0, AlertDialog.VIEWOK  ,null );
}
}
}
}
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"的后面输入)






内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  AS3 步进器