Итак, я успешно добавил фрагмент ролика из библиотеки с помощью addChild(), но теперь хочу получить доступ к некоторым мувиклипам, которые были в этом динамически добавленном мувиклипе.Actionscript 3, addChild из библиотеки, затем получить доступ к своим детям по именам экземпляров
Я использовал стандартную точечную нотацию, а также getChildByName, передав ей имена экземпляров.
Что мне здесь не хватает?
---- EDITED ----
Я попробовал предложение циклический и доступ к ним по индексу, но кажется, не столь интуитивным способом сделать это ... ниже являются два примеры того, что я ранее пробовал, и все они возвращаются как «1119: доступ к возможно неопределенному свойству nameText через ссылку со статическим типом flash.display: DisplayObject». или «1061: вызов возможно неопределенного метода getChildByName через ссылку со статическим типом flash.display: DisplayObject».
пример точечной нотации:
// build circlular display
function buildCircle() {
trace("buildCircle()");
if (viewByState == "assignment") {
var competencyContainer:MovieClip = new MovieClip();
competencyContainer.name = "competencyContainer";
this.addChild(competencyContainer);
var angleSegment:Number = 360/competenciesArray.length;
var angleSum:Number = 360 - angleSegment/2;
for (var i:Number = 0; i < competenciesArray.length; i++) {
var competencyInstance:competencyCircle = new competencyCircle();
competencyInstance.name = "competency" + i;
competencyContainer.addChild(competencyInstance);
competencyContainer.getChildByName("competency" + i).x = circleCenter.x - (Math.sin(angleSum * (Math.PI/180)) * (circleSize/2));
competencyContainer.getChildByName("competency" + i).y = circleCenter.y - (Math.sin((90 - angleSum) * (Math.PI/180)) * (circleSize/2));
competencyContainer.getChildByName("competency" + i).nameText.wordWrap = true;
competencyContainer.getChildByName("competency" + i).nameText.embedFonts = true;
competencyContainer.getChildByName("competency" + i).nameText.htmlText = "COMPETENCY:<br />" + competenciesArray[i].name;
competencyContainer.getChildByName("competency" + i).nameText.setTextFormat(tfTitle, 0, competencyContainer.getChildByName("competency" + i).nameText.text.length - competenciesArray[i].name.length);
competencyContainer.getChildByName("competency" + i).nameText.setTextFormat(tfName, competencyContainer.getChildByName("competency" + i).nameText.text.length - competenciesArray[i].name.length, competencyContainer.getChildByName("competency" + i).nameText.text.length);
competencyContainer.getChildByName("competency" + i).nameText.autoSize = TextFieldAutoSize.CENTER;
competencyContainer.getChildByName("competency" + i).nameText.y = -(competencyContainer.getChildByName("competency" + i).nameText.height/2);
competencyContainer.getChildByName("competency" + i).filters = [circleDefaultDropShadow];
competencyContainer.getChildByName("competency" + i).selectedIndicator.visible = false;
competencyContainer.getChildByName("competency" + i).hit.buttonMode = true;
competencyContainer.getChildByName("competency" + i).hit.mouseEnabled = true;
competencyContainer.getChildByName("competency" + i).hit.tabEnabled = true;
competencyContainer.getChildByName("competency" + i).hit.mouseChildren = true;
competencyContainer.getChildByName("competency" + i).hit.addEventListener(MouseEvent.MOUSE_OVER, function(e:MouseEvent) {
e.target.parent.filters = [circleHoverDropShadow];
});
competencyContainer.getChildByName("competency" + i).hit.addEventListener(MouseEvent.MOUSE_OUT, function(e:MouseEvent) {
e.target.parent.filters = [circleDefaultDropShadow];
});
competencyContainer.getChildByName("competency" + i).hit.addEventListener(MouseEvent.CLICK, function(e:MouseEvent) {
e.target.parent.filters = [circleDefaultDropShadow];
e.target.parent.selectedIndicator.visible = true;
});
angleSum -= angleSegment;
trace("end");
trace(i);
trace("\n\n\n");
}
} else if (viewByState == "competency") {
} else {
}
}
buildCircle();
и пример использования .getChildByName():
// build circlular display
function buildCircle() {
trace("buildCircle()");
if (viewByState == "assignment") {
var competencyContainer:MovieClip = new MovieClip();
competencyContainer.name = "competencyContainer";
this.addChild(competencyContainer);
var angleSegment:Number = 360/competenciesArray.length;
var angleSum:Number = 360 - angleSegment/2;
for (var i:Number = 0; i < competenciesArray.length; i++) {
var competencyInstance:competencyCircle = new competencyCircle();
competencyInstance.name = "competency" + i;
competencyContainer.addChild(competencyInstance);
competencyContainer.getChildByName("competency" + i).x = circleCenter.x - (Math.sin(angleSum * (Math.PI/180)) * (circleSize/2));
competencyContainer.getChildByName("competency" + i).y = circleCenter.y - (Math.sin((90 - angleSum) * (Math.PI/180)) * (circleSize/2));
competencyContainer.getChildByName("competency" + i).getChildByName("nameText").wordWrap = true;
competencyContainer.getChildByName("competency" + i).getChildByName("nameText").embedFonts = true;
competencyContainer.getChildByName("competency" + i).getChildByName("nameText").htmlText = "COMPETENCY:<br />" + competenciesArray[i].name;
competencyContainer.getChildByName("competency" + i).getChildByName("nameText").setTextFormat(tfTitle, 0, competencyContainer.getChildByName("competency" + i).getChildByName("nameText").text.length - competenciesArray[i].name.length);
competencyContainer.getChildByName("competency" + i).getChildByName("nameText").setTextFormat(tfName, competencyContainer.getChildByName("competency" + i).getChildByName("nameText").text.length - competenciesArray[i].name.length, competencyContainer.getChildByName("competency" + i).getChildByName("nameText").text.length);
competencyContainer.getChildByName("competency" + i).getChildByName("nameText").autoSize = TextFieldAutoSize.CENTER;
competencyContainer.getChildByName("competency" + i).getChildByName("nameText").y = -(competencyContainer.getChildByName("competency" + i).getChildByName("nameText").height/2);
competencyContainer.getChildByName("competency" + i).filters = [circleDefaultDropShadow];
competencyContainer.getChildByName("competency" + i).getChildByName("selectedIndicator").visible = false;
competencyContainer.getChildByName("competency" + i).getChildByName("hit").buttonMode = true;
competencyContainer.getChildByName("competency" + i).getChildByName("hit").mouseEnabled = true;
competencyContainer.getChildByName("competency" + i).getChildByName("hit").tabEnabled = true;
competencyContainer.getChildByName("competency" + i).getChildByName("hit").mouseChildren = true;
competencyContainer.getChildByName("competency" + i).getChildByName("hit").addEventListener(MouseEvent.MOUSE_OVER, function(e:MouseEvent) {
e.target.parent.filters = [circleHoverDropShadow];
});
competencyContainer.getChildByName("competency" + i).getChildByName("hit").addEventListener(MouseEvent.MOUSE_OUT, function(e:MouseEvent) {
e.target.parent.filters = [circleDefaultDropShadow];
});
competencyContainer.getChildByName("competency" + i).getChildByName("hit").addEventListener(MouseEvent.CLICK, function(e:MouseEvent) {
e.target.parent.filters = [circleDefaultDropShadow];
e.target.parent.getChildByName("selectedIndicator").visible = true;
});
angleSum -= angleSegment;
trace("end");
trace(i);
trace("\n\n\n");
}
} else if (viewByState == "competency") {
} else {
}
}
buildCircle();
UHH что? Конечно, точечные нотации работают в AS3, вам просто нужно использовать имена экземпляров. Если вы знаете, к чему вы пытаетесь получить доступ, вам не следует перебирать детей. –
Точечная запись в AS2 работает совершенно по-другому. Родитель может получить доступ к своему дочернему элементу по имени: parentMC.childMC._x = 30; childMC не обязательно должна быть переменной экземпляра класса parentMC, чтобы эта строка работала в AS2. childMC - это просто имя родителя. – Amarghosh
Это не должно быть так в AS3. MovieClips по-прежнему являются динамическими классами в AS3, и вы можете получить к ним доступ на основе имен сцен. Ваша точка с именами повторяющихся состояний действительна, но в худшем случае вы получите предупреждение о компиляторе. myMC.someStageInstance все еще полностью действует в AS3. Я использую это каждый день. –