Временная шкала вложенного фрагмента ролика не работает (глубина / цели) во Flash AS2 - PullRequest
0 голосов
/ 05 апреля 2011

Мой код работает нормально, когда все mc помещены в основную временную шкалу (этап). Однако, когда я импортирую их в один мувиклип с именем Container_Mc , код перестает работать.Я уверен, что это связано с целью / глубиной

Вот код, который работает на временной шкале

 stop ();


    first = 1;



    import mx.transitions.Tween;
    import mx.transitions.easing.*;

function dragSetup(clip, targ) {
clip.onPress = function() {
startDrag(this);

};

clip.onRelease = clip.onReleaseOutside=function () {
stopDrag();

if (eval(this._droptarget) == targ) {
var tx:Tween=new Tween(this,'_x',Elastic.easeOut,this._x,this.myFinalX,1,true);
var ty:Tween=new Tween(this,'_y',Elastic.easeOut,this._y,this.myFinalY,1,true);
targ.gotoAndStop(2);
} else {
var tx:Tween=new Tween(this,'_x',Elastic.easeOut,this._x,this.myHomeX,1,true);
var ty:Tween=new Tween(this,'_y',Elastic.easeOut,this._y,this.myHomeY,1,true);
targ.gotoAndStop(2);
}
};
//the variables below will store the clips starting position
clip.myHomeX = clip._x;
clip.myHomeY = clip._y;
//the variables below will store the clips end position
clip.myFinalX = targ._x;
clip.myFinalY = targ._y;

}

dragSetup(drag1,target1)
dragSetup(drag2,target2)
dragSetup(drag3,target3)



btn.onRelease = function() {




  if ((_root.drag1._droptarget == "/target1") && (_root.drag2._droptarget == "/target2") && (_root.drag3._droptarget == "/target3")) {


                    if (first == 1) {
            first = 0;
            result += 
                }

          comment = "Great! correct answer";
         _root.attachMovie("glamour", "glamour2", 202);
             _root.glamour2._x = 226;
              _root.glamour2._y = 153;



    } else {
        comment = "try again!!";

        first = 0;
    }

}

Я уверен, что проблема заключается в IF STATMENT в BTN FUNCTION , поскольку остальная часть приведенного выше кода работает нормально, когда импортируется внутри Container_Mc , это просто оператор if, в противном случае ответ "Try Again" возвращаетсяхотя цели правильные ??

У кого-нибудь есть идеи?

1 Ответ

0 голосов
/ 05 апреля 2011

В вашем обработчике кнопок есть несколько ссылок на _root. Вероятно, это является причиной проблемы, так как я представляю, что drag1, drag2 и т. Д. Находятся внутри вашего контейнера. Код в этой функции выполняется в области действия вашей кнопки, поэтому, если кнопка находится на той же временной шкале, что и отброшенные фрагменты ролика, вы можете смело заменять все вхождения _root на _parent.

Лучшим подходом было бы, однако, изменить область действия обработчика кнопки на область действия вашего контейнера, то есть вам не нужны ни root, ни parent. Это делается с помощью делегата:

btn.onRelease = Delegate.create(this,buttonHandler);

function buttonHandler() { 
    if ((eval(drag1._droptarget) == target1) && (eval(drag2._droptarget) == target2) && (eval(drag3._droptarget) == target3)) { 
        // only if all three dragable objects are dropped to their respective targets sentence returns true  
        if (first == 1) { first = 0; result += } 
        comment = "Great! correct answer"; 
        attachMovie("glamour", "glamour2", 202); 
        glamour2._x = 226; 
        glamour2._y = 153;
} else {
    comment = "try again!!";
    first = 0;
}

Обязательно импортируйте класс Delegate вверху вашего скрипта, чтобы это работало:

import mx.utils.Delegate;

Этот второй подход лучше, потому что вам не нужно беспокоиться о различных областях, и он также похож на подход, используемый в AS3.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...