2012-09-17 50 views
0

,當我試圖運行的代碼,它拋出一個錯誤:它移動在AS3一個圖像/柔性時拋出#2025錯誤

TypeError: Error #1034: Type Coercion failed: cannot convert mx.controls::[email protected] to mx.containers.Canvas.

當我嘗試使用替代

var num1:int = Canvas(event.currentTarget).mouseX; 

var num1:int = Image(event.currentTarget).mouseX; 

它拋出以下錯誤:

ArgumentError: Error #2025: The supplied DisplayObject must be a child of the caller.

下面是代碼,從不同的語句

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="carcan();"> 
<mx:Script> 
    <![CDATA[ 

      import mx.containers.Canvas; 
      import mx.controls.Image; 

      private var images:Array; 
      private var dragInitiator:Image = new Image(); 
      private const IMAGE_COUNT:uint = 5; 
      private var img:Image; 


      private var dragInitiator:Image = new Image(); 

      private var points:flash.geom.Point; 
      private var offset_x:int; 
      private var offset_y:int; 
      private var canal:Canvas; 
      private var doDrag:Boolean; 

      [Embed(source='cards/2C.png')] 
      private var Image0:Class; 

      [Embed(source='cards/2D.png')] 
      private var Image1:Class; 

      [Embed(source='cards/2H.png')] 
      private var Image2:Class; 

      [Embed(source='cards/2S.png')] 
      private var Image3:Class; 

      [Embed(source='cards/3C.png')] 
      private var Image4:Class; 

      public function carcan():void 
      { 
       canal = new Canvas(); 
       canal.setStyle("backgroundColor","blue"); 
       canal.x=100; 
       canal.y=50; 
       canal.width=500; 
       canal.height=400; 
       this.addChild(canal); 
       init(); 
      } 

      public function init():void 
      { 
       images = new Array(IMAGE_COUNT); 

       for (var i:int = 0; i < IMAGE_COUNT; i++) 
        { 
         img= new Image(); 
          images[i] = this["Image" + i]; 
          trace(images[i]); 

        img.x=(i*30)+50; 
        img.source=images[i]; 
        img.id="Image"+i; 
        canal.addChild(img); 

        img.addEventListener(MouseEvent.MOUSE_DOWN, md); 
        img.addEventListener(MouseEvent.MOUSE_MOVE, mm); 
        img.addEventListener(MouseEvent.MOUSE_UP, mu); 

        } 

      } 

       public function md(event:MouseEvent):void 
      { 
       img = new Image(); 
       doDrag=true; 

       canal.setChildIndex(Image(event.target), images.length-1); 
       img.addEventListener(MouseEvent.MOUSE_MOVE, mm); 


      } 
      public function mm(event:MouseEvent):void 
      { 


       if(doDrag==true) 
       { 
        points = new Point(); 
       images = new Array(IMAGE_COUNT); 


       img = new Image(); 
       img = Image(event.target); 

       points.x=event.target.x; 
       points.y=event.target.y; 
       points = localToGlobal(points); 
       img.x=points.x; 
       img.y=points.y; 


       var boundar:flash.geom.Rectangle=new Rectangle(this.x, this.y, this.width/ 2 + 3 * offset_x, this.height/2 + 3 * offset_x); 
       img.startDrag(false, boundar); 
       } 
      } 

      public function onmove(event:MouseEvent):void 
      { 

       img = new Image(); 

      } 

      public function mu(event:MouseEvent):void 
      { 
       canal = new Canvas(); 
       canal.stopDrag(); 
       doDrag=false; 



       this.stopDrag(); 
       doDrag=false; 
       var num1:int = Canvas(event.currentTarget).mouseX; 

     if(num1 > 50 && num1 < 80){ 
      canal.setChildIndex(dragInitiator, 0); 
      setCards();     
      } 
     if(num1 > 80 && num1 < 110){ 
      canal.setChildIndex(dragInitiator, 1); 
      setCards(); 
      } 
     if(num1 > 110 && num1 < 140){ 
      canal.setChildIndex(dragInitiator, 2); 
      setCards(); 
      } 
     if(num1 > 140 && num1 < 170){ 
      canal.setChildIndex(dragInitiator, 3); 
      setCards(); 
      } 
     if(num1 > 170 && num1 < 200){ 
      canal.setChildIndex(dragInitiator, 3); 
      setCards(); 
      } 


      } 

      private function setCards():void{ 
      var b:int = 0; 
      var a:int; 
      var cardsArray:Array = this.getChildren(); 
      for(a = 0;a < cardsArray.length; a++) 
      { 
       canal.getChildAt(a).x = 90+b; 
       b=b+20; 
      } 
      } 

    ]]> 
</mx:Script>  
</mx:Application> 
+0

這是一些代碼組合。當您調用setChildIndex()時,很可能您的「dragInitiator」未初始化。另外,爲什麼所有這些'img = new Image();'都到處調用?這簡直是​​荒謬的恕我直言。 – Vesper

+0

對不起,只是錯過了這個初始化程序。我編輯了代碼。錯誤一直指向num1:int = Canvas(event.currentTarget).mouseX; – user1647017

+0

這意味着你的「event.currentTarget」不是鍵入畫布。作爲目前的目標,你期望得到什麼?此外,通過MouseEvent對象獲得本地座標更好,但有「localX」和「localY」屬性。 – Vesper

回答

1

而不是將圖像轉換爲CAnvas(第一個錯誤),您需要將其轉換爲...作爲圖像。

import spark.components.Image; 

public function mu(event:MouseEvent):void { 
    var current:Image = event.currentTarget as Image; //this is the correct way to cast event.currentTarget 
} 
+0

感謝您糾正我。它幫助我糾正了我的錯誤。 – user1647017

0

兩個錯誤起源:從 var num1:int = Canvas(event.currentTarget).mouseX; #1034起源,因爲img不是畫布

#2025從 的一個起源canal.setChildIndex(dragInitiator, ...); 因爲img不是運河的小孩,你必須addChild(...)纔可以setChildIndex(...)

你可以使用addChildAt而不是setChildIndex它會工作相同,即使效率不高。