2015-04-10 2 views
1

Я пытаюсь выполнить этот код во Flash AS3, но он работает некорректно. В теле моего If, я установил myFlag = 2, но условие if всегда верно!Flash AS3 if/else оператор не работает как ожидалось

Вот мой код:

var myFlag:int = 1; 
if (myFlag==1) 
{ 
    s1.addEventListener(MouseEvent.MOUSE_UP,dars1); 
    function dars1(e:MouseEvent):void 
    { 
     myFlag= 2; 
     s1.gotoAndStop(25); 
     s1.mouseEnabled = false; 
     var darsRequest:URLRequest = new URLRequest("dars1.swf"); 
     var darsLoader:Loader = new Loader(); 
     darsLoader.load(darsRequest); 
     addChild(darsLoader); 
    } 

} 
else 
{ 
    trace("NO-CLICK"); 

} 
+1

Когда флаг = 1 вы настроите слушатель событий ... Затем, даже если флаг равен 2, слушатель по-прежнему присутствует, и до сих пор пожары dars1 на MouseUp ... Разве вы так думаете? – JBA

+0

Как писал JBA: ваш слушатель событий уже добавлен. Вы не проверяете IN прослушиватель событий условие - вы должны. – Fygo

+0

Вы выяснили решение? повышайте полезные ответы и принимайте ответ, если это привело к вашему решению. Если вы решили другое, ответьте на вопрос самостоятельно и примите это. – BadFeelingAboutThis

ответ

0

Рассмотрим ваши первые две строки:

var myFlag:int = 1; //You are setting the var to 1 
if (myFlag==1) //Since you just set it to 1 on the preceding line, this will ALWAYS be true 
{ 

Даже если вы установите myFlag внутри вашего оператора if, в следующий раз, когда этот блок кода запустится, вы просто установите его обратно до 1 с линией var myFlag:int=1.

Что вам нужно сделать, это переместить свой myFlag var и его начальное значение где-то в пределах вашего оператора if.

Поскольку вы не говорите, где работает код, выполняемый (основная временная шкала? Введите обработчик кадров? Mouse down handler?). Трудно особо помочь.

Если это основная временная шкала, тогда код будет запускаться один раз в любом случае, поэтому есть небольшой смысл иметь флаг.

Если это мышь или введите обработчик событий кадра, переместите var myFlag:int=1 на основную временную шкалу и вне этого обработчика события.


EDIT

Основы Вашего комментария, вам нужно просто удалить кнопку, как только это щелкнул. Смотрите код комментарии

s1.addEventListener(MouseEvent.MOUSE_UP,dars1,false,0,true); //best to use a few more parameters and make it a weak listener 
function dars1(e:MouseEvent):void 
{ 
    //load you swf 
    var darsRequest:URLRequest = new URLRequest("dars1.swf"); 
    var darsLoader:Loader = new Loader(); 
    darsLoader.load(darsRequest); 
    addChild(darsLoader); 

    if(s1.parent) s1.parent.removeChild(s1); //if you want the button totally gone from the stage 

    //or if your gotoAndStop(25) does something along the lines of not showing the button, keep that: 

    s1.gotoAndStop(25); 
    s1.mouseEnabled = false; 
    s1.mouseChildren - false; //you might need this too 

    //or remove the listener so the button doesn't dispatch a mouse up anymore 
    s1.removeEventListener(MouseEvent.MOUSE_UP, dars1,false); 
} 
+0

Для лучшей помощи/ответа, пожалуйста, объясните, где код вашего сообщения относится к вашему приложению, и то, что вы пытаетесь выполнить в приложении – BadFeelingAboutThis

+0

, спасибо, что ребята быстро ответили. Я хочу загрузить внешний swf всего один раз, нажав на кнопку, затем отключите кнопку. Теперь что мне делать ??? –

0

Вы удаляете слушателя событий после того, как его функция выполняется:

s1.addEventListener(MouseEvent.MOUSE_UP,dars1); 
function dars1(e:MouseEvent):void 
{ 
    myFlag= 2; 
    s1.gotoAndStop(25); 
    s1.mouseEnabled = false; 
    var darsRequest:URLRequest = new URLRequest("dars1.swf"); 
    var darsLoader:Loader = new Loader(); 
    darsLoader.load(darsRequest); 
    addChild(darsLoader); 
    s1.removeEventListener(MouseEvent.MOUSE_UP,dars1); 
} 
+0

спасибо, ребята, за быстрый ответ. Я хочу загрузить внешний swf всего один раз, нажав на кнопку, затем отключите кнопку. Теперь что мне делать ??? –

+0

@MohammadDavarpanah Ah ... см. Мой обновленный ответ. – Cilan

Смежные вопросы