Просмотр полной версии : IF не проверяет!
Опять проблема с IF! Сначала Код
import flash.events.Event;
var dragg:Boolean = false;
star.addEventListener(MouseEvent.MOUSE_DOWN,stardrag);
star.addEventListener(MouseEvent.MOUSE_UP,stodrag);
function stodrag(e:MouseEvent):void
{
stopDrag();
if (dragg==false)
{trace("fdfff");
star.addEventListener(Event.ENTER_FRAME,onFT);
function onFT(e:Event):void
{
star.x += 10;
/*if (star.x == 200)
{
star.removeEventListener(Event.ENTER_FRAME,onFT);
}*/
}
}
}
function stardrag(e:MouseEvent):void
{
star.startDrag();
dragg = true;
}
Почему он не проверяет строчку ?
if (dragg==false)
Без нее ничего не работает!!
какие образом он ее не проверяет?
метод stopdrag вызывается? чему равен dragg до блока if?
пс
- для булевых переменных не надо писать == true\false достаточно (dragg) или (!dragg)
- не надо использовать локальные методы для подписки на какие-либо события(лучше их вообще не использовать)
- именование переменных должно отражать смысл использования или содержание, например isDrag
когда вы нажали на мовиклип вы задали dragg = true; а в условии if заданно , если dragg равно false , только в этом случае условное выражение может вернуть значение true и выполнить код, еще приемник события стоит onFT вынести за пределы функции.
Как раз он её и проверяет, но не проходит дальше т.к. методе stardrag вы присвоили переменной dragg значение true.
import flash.events.Event;
var isDrag:Boolean = false;
star.addEventListener(MouseEvent.MOUSE_DOWN,stardrag);
star.addEventListener(MouseEvent.MOUSE_UP,stodrag);
function stodrag(e:MouseEvent):void
{
isDrag = false;
stopDrag();
if (!dragg)
{trace("fdfff");
star.addEventListener(Event.ENTER_FRAME,onFT);
function onFT(e:Event):void
{
e.currentTarget.x -= 2;
e.currentTarget.y -= 2;
if (e.currentTarget.x == 67.95 && e.currentTarget.y == 48)
{
star.removeEventListener(Event.ENTER_FRAME,onFT);
}
}
}
}
function stardrag(e:MouseEvent):void
{
star.startDrag();
isDrag = true;
}
Вот так изменил и добавил то что isDrag = false в функцию stodrag. Теперь работает НО есть еще два вопроса. Почему он не останавливается тоесть не выполняется star.removeEventListener(Event.ENTER_FRAME,onFT);
Почему заработало только после добавления isDrag в функцию? Я же определил ее до этого как false .
- не надо использовать локальные методы для подписки на какие-либо события(лучше их вообще не использовать) - немного непонял...
Не останавливается, потому что не выполняется условие e.currentTarget.x == 67.95 && e.currentTarget.y == 48.
Заработало потому что isDrag = false у вас стало только когда вы отпустили кнопку мышки.
- не надо использовать локальные методы для подписки на какие-либо события(лучше их вообще не использовать) можно ли это разъяснить?
Что именно, что такое локальные методы или почему их лучше не использовать?
Честно говоря не понятно зачем Вам все эти манипуляции с isDrag .Изначально вы задаете значение false, при
нажатии задаете true , потом когда отпустили кнопку опять задали false и в условном операторе опять поменяли значение на true.
import flash.events.Event;
var isDrag:Boolean = false;
star.addEventListener(MouseEvent.MOUSE_DOWN,stardrag);
star.addEventListener(MouseEvent.MOUSE_UP,stodrag);
function stodrag(e:MouseEvent):void
{
stopDrag();
if (isDrag)
{
trace("fdfff");
star.addEventListener(Event.ENTER_FRAME,onFT);
isDrag = false;
}
}
function onFT(e:Event):void
{
e.currentTarget.x -= 2;
e.currentTarget.y -= 2;
if (e.currentTarget.x <= 67.95 && e.currentTarget.y <= 48)
{
star.removeEventListener(Event.ENTER_FRAME,onFT);
}
}
function stardrag(e:MouseEvent):void
{
star.startDrag();
isDrag = true;
}
вот так все работает
caseyryan
06.06.2013, 17:32
можно ли это разъяснить?
Использовать локальные методы плохо потому, что после исполнения метода в котором они находятся, ссылок на них больше не остается и они становятся доступными для сборщика мусора, который, с большой вероятностью очень быстро их убьет.
Спасибо за объяснение) и за решение) Все работает)))
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.