,當我試圖運行的代碼,它拋出一個錯誤:它移動在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>
這是一些代碼組合。當您調用setChildIndex()時,很可能您的「dragInitiator」未初始化。另外,爲什麼所有這些'img = new Image();'都到處調用?這簡直是荒謬的恕我直言。 – Vesper
對不起,只是錯過了這個初始化程序。我編輯了代碼。錯誤一直指向num1:int = Canvas(event.currentTarget).mouseX; – user1647017
這意味着你的「event.currentTarget」不是鍵入畫布。作爲目前的目標,你期望得到什麼?此外,通過MouseEvent對象獲得本地座標更好,但有「localX」和「localY」屬性。 – Vesper