溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

AS3 屬性綁定

發(fā)布時(shí)間:2020-08-05 17:44:28 來源:網(wǎng)絡(luò) 閱讀:749 作者:Aonaufly 欄目:開發(fā)技術(shù)

縱然AS3中有addEventListener 和 removeEventListener方案,但是面對(duì)情況多變的屬性value值,這2個(gè)參數(shù)還是顯得力不從心。例如在Game中,玩家的exp , lv ,  combat等等變化的話總是需要通知很多的功能模塊,而exp , lv , combat這些信息有時(shí)候并不在一個(gè)model(data)里面,使用addEventListener 和 removeEventListener,顯得很臃腫 , 今天本人提供一種封裝,可以輕松的解決Model到UI的屬性監(jiān)聽問題:

需要用到BindTool.swc將在附件中提供。

前景 : 假設(shè)有View 對(duì) User(model)里面的屬性(hp , state)進(jìn)行監(jiān)聽

關(guān)于 User(model):瑕疵是 字段(_hp , _state 必須被public修飾 , 有時(shí)間本人會(huì)繼續(xù)的改進(jìn))


package com
{
import com.bind.BaseData;
import flash.events.IEventDispatcher;
public final class User extends BaseData
{
  public function User(target:IEventDispatcher=null)
  {
   super(target);
  }
 
  public var _hp : int = 20;
  public function set HP( value : int ) : void
  {
   //設(shè)置并注冊(cè)(在基類中完成設(shè)置新值并廣播)
   this.changeValue( "HP" , "_hp" , value );//屬性名稱 , 對(duì)應(yīng)的字段名稱 , 值(當(dāng)前的)
  }
  public function get HP():int
  {
   return _hp;
  }
 
  public var _state : uint = 10;
 
  public function set State( value : uint ):void
  {
   this.changeValue( "State" , "_state" , value );//屬性名稱 , 對(duì)應(yīng)的字段名稱 , 值(當(dāng)前的)
  }
  public function get State():uint
  {
   return this._state;
  }
}
}


假設(shè) AS3  屬性綁定UserView.as需要監(jiān)聽 User的HP 和 State

package com
{
 import com.bind.BindTools;
 
 import flash.display.Sprite;
 /**
  * 模擬一個(gè)窗口 , 當(dāng)User中hp改變時(shí) , 此窗口的相應(yīng)值也會(huì)隨之改變
  */
 public final class UserView extends Sprite
 {
     private var user : User = null;
  
  private var _hp_view : int = 0;
  public function set HP_view( value : int ) : void
  {
   trace("HP_view 的值發(fā)生了改變  "  + _hp_view +  " -> " + value );
   this._hp_view = value;
   
  }
  
  public function UserView( user : User )
  {
   super();
   this.user = user;
   //綁定屬性 ----------------------------------------------------------
   // this -> 本類
   // HP_view -> 本類需要與user類(第三個(gè)參數(shù))中HP屬性映射的屬性
   // user model類
   // HP
   // true 是否用HP初始化HP_view
   BindTools.bindProperty( this , "HP_view" , user , "HP" , true );
   
   //綁定回調(diào)方法--------------------------------------------------------
   // this._user_state_callback 回調(diào)方法
   // user model類
   // State 需要監(jiān)聽的user的屬性
   // true 是否初始化調(diào)用_user_state_callback
   BindTools.bindSetter( this._user_state_callback , user , "State" , true );
  }
  private function _user_state_callback( value : uint ) : void
  {
   trace("State回調(diào) 得到的值為 :" + value );
  }
 }
}

測(cè)試:

package
{
 import com.User;
 import com.UserView;
 
 import flash.display.Sprite;
 
 public class BindTest_AS extends Sprite
 {
  public function BindTest_AS()
  {
   var user : User = new User();
   var view_sprite : UserView = new UserView( user );
   this.addChild( view_sprite );
   user.HP = 200;
   user.State = 5;
   
   trace( "user.HP" , user.HP );
   trace( "user.State" , user.State );
   
  }
 }
}

結(jié)果:

AS3  屬性綁定

附件:http://down.51cto.com/data/2366826
向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI