当我尝试运行代码时,会抛出错误:
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>
答案 0 :(得分: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
}
答案 1 :(得分:0)
这两个错误源于不同的陈述:
#1034
来自。{
var num1:int = Canvas(event.currentTarget).mouseX;
因为img
不是画布
#2025
来自其中一个。{
canal.setChildIndex(dragInitiator, ...);
因为img
不是运河的孩子,所以你必须addChild(...)
才能setChildIndex(...)
你可以使用addChildAt
而不是setChildIndex
它可以使用相同的效果,如果效率不高的话。