«Является ли MovieClip» верным, но компилятор настаивает, что это не так, и выдает ошибку # 1034: сбой приведения типов? (AS3) - PullRequest
0 голосов
/ 23 октября 2019

В моей библиотеке есть различные иконки еды, конвертированные и связанные как мувиклипы, которые я динамически добавляю в сцену. Я пытаюсь переместить их из одного контейнера в другой. Контейнеры также динамически добавляются в MovieClips.

Я пытался переместить эти значки, которые являются экземплярами «расширенного класса MovieClip», в другой MovieClip как дочерний элемент путем перетаскивания, но с помощью currentTarget in drop (это нормально вdrag) не распознается как MovieClip даже при использовании «currentTarget as MovieClip», и компилятор выдает ошибку. Каждый след указывает, что это действительно 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...