actionscript-3 - “is MovieClip”是真的,但编译器坚持它不是并抛出错误 #1034: Type Coercion failed? (AS3)
问题描述
我在我的图书馆中有各种食物图标转换并链接为我动态添加到场景中的电影剪辑。我正在尝试将它们从一个容器移动到另一个容器。容器也是动态添加的影片剪辑。
我一直在尝试通过拖放将这些“MovieClip 扩展类”实例的图标作为子项移动到另一个 MovieClip,但即使使用“currentTarget as MovieClip”,drop 中的 currentTarget(拖动时也可以)也不会被识别为 MovieClip " 并且编译器抛出错误。但每条痕迹都表明它确实是一个电影剪辑。我无计可施。
“plate.addChild(mc);” 从“货架”放入“盘子”时导致错误。
.fla 文件:https ://1drv.ms/u/s!ApqQOqYhGvWHget1A4YRqyzT3a9BEQ?e=9UJB0R
import flash.display.Sprite;
import flash.display.MovieClip;
/*;
choValues = {
"apple": 15,
"bakedBeans": 15,
"chickenLeg": 0,
"chickenNuggets": 15,
"cornOnTheCob": 15,
"egg": 0,
"grapes": 5,
"hamburger": 30,
"milkFull": 24,
"juiceFull": 30,
"juiceHalf": 15,
"saltineCrackers": 5,
"orange": 15,
"tomato": 5
}*/
var foodNames:Array = new Array();
var choValues:Array = new Array();
var options:Array = new Array();
var index:Array = new Array();
var shelves:MovieClip = new Shelves();
var plate:MovieClip = new Plate();
var plateSlots:Array = [0,0,0,0];
var iconSize:Array = new Array();
trace(stage.stageWidth);
trace(stage.stageHeight);
var relativeWidth:Number = stage.stageWidth/32;
var relativeHeight:Number = stage.stageHeight/32;
trace("shelves");
trace(shelves.x = relativeWidth*4 );
trace(shelves.y = relativeHeight*8);
trace(shelves.width = relativeWidth*10);
trace(shelves.height = relativeHeight*14);
stage.addChildAt(shelves,1);
trace("plate");
plate.instanceName = "plate";
trace(plate.x = relativeWidth*15 );
trace(plate.y = relativeHeight*8);
trace(plate.width = relativeWidth*10);
trace(plate.height = relativeHeight*14);
plate.name = "plate";
stage.addChildAt(plate,0);
trace("plate.name "+ plate.name);
/*var fruit = new orange;
trace("fruit");
trace(fruit.x = plate.width/2);
trace(fruit.y = plate.height/2);
//trace(plateSlots.width = plate.width/2);
//trace(plateSlots.height = plate.height/2);*/
//plate.addChild(fruit);
function drag (e:MouseEvent):void //find the slot
{
e.currentTarget.startDrag();
trace("drag "+e.currentTarget.name);
trace("Classname "+ getQualifiedClassName(e.currentTarget));
}
function drop (e:MouseEvent):void
{
e.currentTarget.stopDrag();
trace("drop Classname "+ getQualifiedClassName(e.currentTarget));
trace("drop name "+ (e.currentTarget.name));
//if(e.currentTarget.dropTarget !=null)
//if(e.currentTarget.dropTarget.parent !=null)
//if(e.currentTarget.dropTarget.parent.parent != null)
try{if (e.currentTarget.dropTarget.parent.parent.name == "plate")
{
trace("currentTarget is "+e.currentTarget);
var mc:MovieClip = MovieClip(e.currentTarget);
trace(mc);
trace("mc is movieClip?" + (mc is MovieClip));
trace("is plate");
for (var i=0; i<4; i++)
{
if (plateSlots[i] == 0)
{
trace(mc);
//shelves.removeChild(mc);
plate.addChild(mc);
//e.currentTarget.width = iconSize[0];
//e.currentTarget.height = iconSize[1];
trace(mc.x = plate.width/6 + ((i%2)*plate.width/8));
trace(mc.y = plate.height/6 + ((i<2 ? 0:1)*plate.height/4));
plateSlots[i] = 1;
mc.slot = i;
return;
}
}
}
else{
shelves.addChild(e.currentTarget as MovieClip);
e.currentTarget.x = e.currentTarget.oldX;
e.currentTarget.y = e.currentTarget.oldY;
}
}
catch(e:Error){}
shelves.addChild(e.currentTarget as MovieClip);
e.currentTarget.x = e.currentTarget.oldX;
e.currentTarget.y = e.currentTarget.oldY;
}
function randomize ( a : *, b : * ) : int {
return ( Math.random() > .5 ) ? 1 : -1;
}
foodNames.push(
"apple","bakedBeans","chickenLeg",
"chickenNuggets","cornOnTheCob","egg",
"grapes","hamburger","milkFull",
"juiceFull","juiceHalf","saltineCrackers",
"orange","tomato"
)
choValues.push(
15,15,0,
15,15,0,
5,30,24,
30,15,5,
15,5
)
for (var i:int=1; i<foodNames.length; i++)
{
index.push(i);
}
index.sort(randomize);
trace(index);
for(i=0; i<8; i++)
{
options[index[i]] = new (getDefinitionByName(foodNames[index[i]]));
trace("class "+getDefinitionByName(foodNames[index[i]]));
options[index[i]].addEventListener(MouseEvent.MOUSE_DOWN, drag);
options[index[i]].addEventListener(MouseEvent.MOUSE_UP, drop);
options[index[i]].CHO = choValues[i];
options[index[i]].x += ( (2*(i%4)) +1 ) *(shelves.width /10);
options[index[i]].y = ( ( i<4 ) ? 17 : 37 )*(shelves.height/64);
options[index[i]].oldX = options[index[i]].x;
options[index[i]].oldY = options[index[i]].y;
shelves.addChild(options[index[i]]);
}
//iconSize[0] = options[index[0]].width;
//iconSize[1] = options[index[0]].height;
stop();
解决方案
推荐阅读
- ruby-on-rails - 在 AWS Elastic Beanstalk 上使用 Docker 预编译资产
- angularjs - 服务抛出未知提供者错误 - Angularjs单元测试
- javascript - 在 Chrome 中打印图表
- java - 使用 System.out.write 方法将 int 转换为字节数组并打印到控制台
- jasper-reports - 导出为 PDF 时,如何在 ireport 的文本字段中的文本后添加空格?
- jenkins - 如何在声明性并行步骤中为每个阶段使用执行器
- arrays - 如何解决“失败:在量角器测试中将循环结构转换为 JSON”
- java - 如何在 javax.lang.model.element TypeElement 中模拟 getDeclaredAnnotation
- c# - C#:如何在没有“复制/粘贴”代码的情况下重写它
- oracle - 将 blob 列中的 pdf 存储到数据库表中,以顶点形式/区域的 pdf 预览?