0

当我尝试运行代码时,它会引发错误:

TypeError:错误 #1034:类型强制失败:无法将 mx.controls::Image@a9030b1 转换为 mx.containers.Canvas。

当我只是尝试更换

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

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

它抛出以下错误:

ArgumentError:错误 #2025:提供的 DisplayObject 必须是调用者的子对象。

下面是代码,

<?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>
4

2 回答 2

1

而不是将 Image 转换为 CAnvas(第一个错误),您需要将其转换为...作为 Image。

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
}
于 2012-09-17T17:13:25.350 回答
0

这两个错误源于不同的陈述: #1034源于 var num1:int = Canvas(event.currentTarget).mouseX; 因为 an imgis not a Canvas

#2025源于其中之一, 因为canal.setChildIndex(dragInitiator, ...); 不是img运河的孩子,你必须addChild(...)在你可以之前setChildIndex(...)

你可以使用它addChildAt来代替setChildIndex它,如果不是效率低一点的话,它的工作方式也是一样的。

于 2012-09-17T12:19:27.517 回答