Просмотр полной версии : Как обратиться к мувиклипу лежащему в кадре?
VovkaMorkovka
21.11.2007, 18:43
Здравствуйте господа, возникла такая проблема.
В мувиклипах восемь кадров, в каждом лежит по мувиклипу
Вопрос, как мне обратиться к мувиклипу лежащему в текущем кадре?
Т.е я хочу сделать что - то похожее на
this.frameContent.stop();
Где frameContent - имя мувиклипа лежащего в кадре
как-то так..
public function mc1() {
addEventListener(Event.ENTER_FRAME, sayframe);
}
private function sayframe(e:Event):void{
if(currentFrame==1){
...
}
}
VovkaMorkovka
21.11.2007, 19:57
getChildByName - не совсем подходит
Мне нужно сделать вот что: есть солдат который ходит по восьми направлениям. Восемь направлений представляют собой восемь кадров, в каждом направлении находится туловище и ноги, в мувиклипе туловище находится мувиклип оружие
Мне надо управлять движениями ног, туловища и менять оружие. Аттачить програмно не вариант т.к. мувиков много и рисует их дизайнер.
getChildByName возвращает DisplayObject привести его к типу MovieClip низзя ибо это производный класс.
Так вот, как реализовать вышеописанное
Ниже код того, как я это делаю
public function startMoveHandler(e:Event):void{
var child:DisplayObject =getChildByName("capitan_direction");
//trace("mc:"+mc);
if (mc!=null){
var mc:MovieClip=MovieClip(child);
mc.gotoAndPlay("stop");
}else{
trace("mc:"+mc);
}
}
public function stopMoveHandler(e:Event):void{
var child:DisplayObject =getChildByName("capitan_direction");
if (mc!=null){
var mc:MovieClip=MovieClip(child);
mc.gotoAndPlay("move");
}else{
trace("mc:"+mc);
}
}
На каждом кадре лежит мувиклип с именем capitan_direction и тем не менее вот лог
mc:null
mc:null
mc:null
Почему так ума не приложу.
Почему это нельзя привести к типу?
VovkaMorkovka
21.11.2007, 20:08
Опс, к типу можно - загнался я
Надо использовать оператор as.
VovkaMorkovka
21.11.2007, 20:55
Пробовал - не работает, и потом, насколько я понимаю, as отличается от явного приведения тем, что возвращает null если невозможно преобразовать
VovkaMorkovka
21.11.2007, 21:27
Вот так работает, но через раз...
public function startMoveHandler(e:Event):void{
var child:DisplayObject =this.capitan_direction;
if (child!=null){
var mc:MovieClip=child as MovieClip;
mc.gotoAndPlay("move");
}else{
trace("child:"+child)
}
}
public function stopMoveHandler(e:Event):void{
var child:DisplayObject =this.capitan_direction;
if (child!=null){
var mc:MovieClip=child as MovieClip;
mc.gotoAndPlay("stop");
}else{
trace("child:"+child)
}
}
Т.е. child в одном и том - же кадре то null, то не null вопрос в том почему?
null будет в том кадре, в котором этого клипа нет.
VovkaMorkovka
21.11.2007, 21:47
Так в том - то и дело, что этот клип есть во ВСЕХ кадрах, писал руками и неоднократно проверял, один и со товарищи
Значит в каких-то кадрах не задано имя для него.
VovkaMorkovka
21.11.2007, 22:00
Вот привожу слегка видоизмененный код и логи
Код
public function startMoveHandler(e:Event):void{
var child:DisplayObject =this.capitan_direction;
//directionName - это имя кадра
trace("startMoveHandler,child:",child,_model.directionName);
if (child!=null){
var mc:MovieClip=child as MovieClip;
mc.gotoAndPlay("move");
}
}
public function stopMoveHandler(e:Event):void{
var child:DisplayObject =this.capitan_direction;
trace("stopMoveHandler,child:",child,_model.directionName);
if (child!=null){
var mc:MovieClip=child as MovieClip;
mc.gotoAndPlay("stop");
}
}
model.directionName - имя кадра на который переходим
...
startMoveHandler,child: null right_direction
stopMoveHandler,child: [object capitan00136_13] right_direction
...
startMoveHandler,child: [object capitan00136_13] right_direction
stopMoveHandler,child: [object capitan00136_13] right_direction
Как видно из логов в одном и том - же кадре мувиклип к которому обращаюсь то есть, то нет - как сие может быть?
Не знаю, сваяйте пример, если получится. Если нет — проблема где-то у вас.
VovkaMorkovka
21.11.2007, 22:41
Вот пример
Есть мувиклип TestMC в нем два кадра, на первом кадре лежит мувиклип
attachMC1 на втором attachMC2
Я ставлю слушатель на интере фрейм где и пытаюсь получить мувиклип, который на кадре
Вот код
package classes{
import flash.display.MovieClip;
import flash.events.Event;
public class TestMC extends MovieClip
{
public function TestMC()
{
this.addEventListener(Event.ENTER_FRAME,onEnterFrameHandler);
}
public function onEnterFrameHandler(e:Event):void{
try{
trace("this.getChildByName(\"innerMC\") >>>>"+ this.getChildByName("innerMC"));
trace("this.innerMC >>>>"+this.innerMC);
}catch(e:Error){
trace(e.message);
}
}
}
}
Вот лог
this.getChildByName("innerMC") >>>>null
this.innerMC >>>>null
TypeError: Error #1034: Type Coercion failed: cannot convert attachMC2@3019881 to attachMC1.
this.getChildByName("innerMC") >>>>null
this.innerMC >>>>null
this.getChildByName("innerMC") >>>>null
this.innerMC >>>>null
TypeError: Error #1034: Type Coercion failed: cannot convert attachMC2@30196a1 to attachMC1.
Как видно из лога флеш зачем - то пытается привести к типу то, что он выводит...
Вовпросеа как всегда два: почему так происходит, и что делать
Во вложениях флешдевелоповская папка с проектом
Ну почему
TypeError: Error #1034: Type Coercion failed: cannot convert attachMC2@30196a1 to attachMC1.
Я кажися знаю, вопрос в том как всетаки достучаться до мувиклипа лежащего в кадре, либо как сделать сию вещь по другому?
Вот код innerMC1, innerMC2 - имена мувиклипов, которые лежат на первои и втором кадре соответственно, имя прописано в свойствах ручками. В первом кадре каждого из мувиклипов прописан трейс, мол я есть я и мой родитель.Так вот, мувиклип, который лежит в кадре отлично видит своего родителя, а вот родитель его чегото не видит...
Что подтверждается логом, поясните плиз, почему это так и как с этим бороться
Вот код
package classes{
import flash.display.MovieClip;
import flash.events.Event;
public class TestMC extends MovieClip
{
public function TestMC()
{
this.addEventListener(Event.ENTER_FRAME,onEnterFrameHandler);
}
public function onEnterFrameHandler(e:Event):void{
trace("-----------------------");
try{
var mc1:MovieClip= getChildAt(0) as MovieClip;
var mc2:MovieClip= getChildAt(1) as MovieClip;
trace("mc1:",mc1,"mc2:",mc2);
}catch(e:Error){
trace(e.message);
}
}
}
}
Вот лог
-----------------------
mc1: null mc2: null
I m mc 1 [object TestMC]
-----------------------
mc1: null mc2: null
I am mc 2 [object TestMC]
В аттаче проект, подскажите, плиз в чем дело - я совсем запарился...
Вот код innerMC1, innerMC2 - имена мувиклипов, которые лежат на первои и втором кадре соответственно, имя прописано в свойствах ручками. В первом кадре каждого из мувиклипов прописан трейс, мол я есть я и мой родитель.Так вот, мувиклип, который лежит в кадре отлично видит своего родителя, а вот родитель его чегото не видит...
Что подтверждается логом, поясните плиз, почему это так и как с этим бороться
Вот код
package classes{
import flash.display.MovieClip;
import flash.events.Event;
public class TestMC extends MovieClip
{
public function TestMC()
{
this.addEventListener(Event.ENTER_FRAME,onEnterFrameHandler);
}
public function onEnterFrameHandler(e:Event):void{
trace("-----------------------");
try{
var mc1:MovieClip= getChildByName("innerMC1") as MovieClip;
var mc2:MovieClip= getChildByName("innerMC2") as MovieClip;
trace("mc1:",mc1,"mc2:",mc2);
}catch(e:Error){
trace(e.message);
}
}
}
}
Вот лог
-----------------------
mc1: null mc2: null
I m mc 1 [object TestMC]
-----------------------
mc1: null mc2: null
I am mc 2 [object TestMC]
В аттаче проект, подскажите, плиз в чем дело - я совсем запарился...
VovkaMorkovka, я устал объдинять за вами посты.
Надо добавить что-то — извольте отредактировать пост.
Чтобы к клипам можно было обращаться, нужно подождать ровно один фрейм, дождавшись инициализации.
sultan_M
15.02.2008, 22:47
Простите, что так позно. Я только сейчас увидел ваше сообщение. Проблема немножко странная. У меня вышло толко одно рещение по этому поводу. Взгляните на прилагаемый файл. ( Класс main - не знаю какую роль он играет в вашем проекте?! ).
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.