2011-09-14 38 views
0

我正在創建一個XML自定義紙牌遊戲,並且正在構建甲板並使它們可拖動,以便用戶可以將它們拖放到另一張牌的頂部。影片剪輯的多個實例的深度問題

我已經想出瞭如何構建卡組並放置駐留在庫中的影片剪輯的多個實例,我只是想不出讓每張卡都可拖動的方法。目前正在發生的事情是,甲板上的卡是唯一一個會拖動的卡,即使我點擊下面的卡也是如此。我研究了setChildIndex(),但我認爲我沒有正確使用它。

我遇到的另一個問題是,當用戶點擊click_btn(僅用於測試命名)來構建需要一段時間才能構建的套牌時,是否可以加速?

然後,一旦用戶點擊第一張卡來拖動它,還有另一個漫長的等待?

文檔類(CardGame.as)

package library 
{ 
import flash.display.*; 
import flash.events.*; 
import flash.net.*; 

public class CardGame extends Sprite 
{ 
    /* 
    * variables 
    */ 
    private var _xml:XML; 
    private var _loader:URLLoader; 
    private var cardArray:Array; 
    private var activity:Activity; 
    /* 
    * constructor 
    */ 
    public function CardGame():void 
    { 
     _loader = new URLLoader();    
     _loader.addEventListene(Event.COMPLETE,buildArray);    
     _loader.load(new URLRequest("library/card.xml")); 
     click_btn.addEventListener(MouseEvent.CLICK,buildDeck); 
    } 
    /* 
    * metohods 
    */ 
    public function buildArray(e:Event):Array 
    { 
     cardArray = new Array(); 
     _xml = new XML(_loader.data); 
     for(var i=0;i<_xml.card.length();i++) 
     { 
      if(_xml.card.face[i]=="activity") 
      { 
       cardArray.push({id:_xml.card.id[i],face:_xml.card.face[i],category:_xml.card.category[i],point:_xml.card.point[i],value:_xml.card.value[i]}); 
      } 
      else if(_xml.card.face[i]=="event") 
      { 
       cardArray.push({id:_xml.card.id[i],face:_xml.card.face[i],category:_xml.card.category[i],point:_xml.card.point[i],value:_xml.card.value[i]}); 
      } 
      else 
      { 
       trace("no card found"); 
      } 
     } 
     return cardArray; 
    } 
    public function buildDeck(e:Event):void 
    { 
     for(var i=0;i<cardArray.length;i++) 
     { 
      if(cardArray[i].face == "activity") 
      { 
       activity = new Activity(); 
       activity.x = 200; 
       activity.y = 150; 
       activity.id = i; 
       activity.name = "b"+i; 
       activity.buttonMode = true; 
       stage.addChild(activity); 
       activity.addEventListener(MouseEvent.MOUSE_DOWN,dragStart); 
       activity.addEventListener(MouseEvent.MOUSE_UP,dragStop); 
      } 
     } 
    } 
    public function dragStart(e:Event):void 
    { 
     activity.parent.setChildIndex(activity, numChildren - 1); 
     activity.startDrag(); 
    } 
    public function dragStop(e:Event):void 
    { 
     this.stopDrag(); 
    } 
} 
} 

card.xml

<?xml version="1.0" encoding="iso-8859-1"?> 
<cardgame> 
    <card> 
      <id>1</id> 
      <face>activity</face> 
     <catagory>Task</catagory> 
      <point>2</point>  
      <value>Change the rule.</value> 
    </card> 
    <card> 
      <id>21</id> 
      <face>event</face> 
     <catagory>Injury</catagory> 
      <point>-2</point>  
      <value>Injury due to animal/snake/insect bite-count 3.</value> 
    </card> 
</cardgame> 

的xml文件居然有64個活性卡項目和41個事件卡項目,但我修剪下來做它更容易。

回答

0

您從未將變量活動設置爲正確的目標。一個簡單的解決方法是將其設置在dragStart方法中。這將確保您始終拖動正確的卡片。

activity = e.target as Activity; 

public function dragStart(e:Event):void 
{ 
    activity = e.target as Activity; 
    activity.parent.setChildIndex(activity, numChildren - 1); 
    activity.startDrag(false); 
} 

關於您的其他問題,我不認爲它應該採取這麼長的時間解析XML和創建實例。也許你的一些方法造成了延遲。或者也許有很多圖形可以優化。


編輯:此代碼使我的排序工作。希望能幫助到你。


Main.as

package 
{ 
    import flash.display.*; 
    import flash.events.*; 
    import flash.net.*; 

    public class CardGame extends Sprite 
    { 
     /* 
     * variables 
     */ 
     private var _xml:XML; 
     private var _loader:URLLoader; 
     private var _cardArray:Array; 
     private var _activity : Activity; 
     /* 
     * constructor 
     */ 
     public function CardGame() 
     { 
      _loader = new URLLoader();    
      _loader.addEventListener(Event.COMPLETE, buildArray);    
      _loader.load(new URLRequest("cards.xml")); 
      //click_btn.addEventListener(MouseEvent.CLICK,buildDeck); 
     } 
     /* 
     * metohods 
     */ 
     public function buildArray(e:Event) : void 
     { 
      _cardArray = new Array(); 
      _xml = new XML(_loader.data); 

      for(var i=0;i<_xml.card.length();i++) 
      { 
       if(_xml.card.face[i]=="activity") 
       { 
        _cardArray.push({id:_xml.card.id[i],face:_xml.card.face[i],category:_xml.card.category[i],point:_xml.card.point[i],value:_xml.card.value[i]}); 
       } 
       else if(_xml.card.face[i]=="event") 
       { 
        _cardArray.push({id:_xml.card.id[i],face:_xml.card.face[i],category:_xml.card.category[i],point:_xml.card.point[i],value:_xml.card.value[i]}); 
       } 
       else 
       { 
        trace("no card found"); 
       } 
      } 

      buildDeck(null); 
     } 

     public function buildDeck(e:Event):void 
     { 
      for(var i=0 ; i < _cardArray.length ; i++) 
      { 
       if(_cardArray[i].face == "activity") 
       { 
        _activity = new Activity(); 
        _activity.x = 200; 
        _activity.y = 150; 
        _activity.id = i; 
        _activity.name = "b"+i; 
        _activity.buttonMode = true; 
        addChild(_activity); 
        _activity.addEventListener(MouseEvent.MOUSE_DOWN,dragStart); 
        _activity.addEventListener(MouseEvent.MOUSE_UP,dragStop); 
       } 
      } 
     } 
     public function dragStart(e:Event):void 
     { 
      _activity = e.target as Activity; 
      _activity.parent.setChildIndex(_activity, numChildren - 1); 
      _activity.startDrag(false); 
     } 
     public function dragStop(e:Event):void 
     { 
      this.stopDrag(); 
     } 
    } 
} 

Activity.as

package 
{ 
    import flash.display.Sprite; 

    public class Activity extends Sprite 
    { 

     private var _id : int; 

     public function Activity() 
     { 
      super(); 

      with(graphics) 
      { 
       lineStyle(0, 0xFF0000, 1); 
       beginFill(Math.random()*0xFFFFFF, 1.0); 
       drawRect(0, 0, 80, 100); 
      } 
     } 


     public function get id():int 
     { 
      return _id; 
     } 

     public function set id(value:int):void 
     { 
      _id = value; 
     } 

    } 
} 
+0

@馬蒂亞斯,現在拖偉大工程:-)我唯一的問題是卡我拖延出現在其他人後面。有沒有辦法讓它在被拖動時出現在所有其他卡之上?謝謝 – Mike

+0

另外Mattias,你是正確的圖形被沉重。我創建了一個簡單的盒子,並在它的地方使用它,並沒有猶豫,出色的想法:-) – Mike

+0

當我執行你的代碼時,我沒有這個問題。我不得不改變一些東西來讓你的代碼工作。我將發佈我的代碼,以便您可以試用。 – Mattias