PDA

Просмотр полной версии : IF не проверяет!


mAK08
06.06.2013, 16:18
Опять проблема с 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)
Без нее ничего не работает!!

СлаваRa
06.06.2013, 16:25
какие образом он ее не проверяет?
метод stopdrag вызывается? чему равен dragg до блока if?

пс
- для булевых переменных не надо писать == true\false достаточно (dragg) или (!dragg)
- не надо использовать локальные методы для подписки на какие-либо события(лучше их вообще не использовать)
- именование переменных должно отражать смысл использования или содержание, например isDrag

belv
06.06.2013, 16:33
когда вы нажали на мовиклип вы задали dragg = true; а в условии if заданно , если dragg равно false , только в этом случае условное выражение может вернуть значение true и выполнить код, еще приемник события стоит onFT вынести за пределы функции.

Rivexe
06.06.2013, 16:37
Как раз он её и проверяет, но не проходит дальше т.к. методе stardrag вы присвоили переменной dragg значение true.

mAK08
06.06.2013, 16:41
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 .
- не надо использовать локальные методы для подписки на какие-либо события(лучше их вообще не использовать) - немного непонял...

Rivexe
06.06.2013, 16:47
Не останавливается, потому что не выполняется условие e.currentTarget.x == 67.95 && e.currentTarget.y == 48.
Заработало потому что isDrag = false у вас стало только когда вы отпустили кнопку мышки.

mAK08
06.06.2013, 16:56
- не надо использовать локальные методы для подписки на какие-либо события(лучше их вообще не использовать) можно ли это разъяснить?

Rivexe
06.06.2013, 17:11
Что именно, что такое локальные методы или почему их лучше не использовать?

belv
06.06.2013, 17:13
Честно говоря не понятно зачем Вам все эти манипуляции с 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
можно ли это разъяснить?
Использовать локальные методы плохо потому, что после исполнения метода в котором они находятся, ссылок на них больше не остается и они становятся доступными для сборщика мусора, который, с большой вероятностью очень быстро их убьет.

mAK08
06.06.2013, 21:24
Спасибо за объяснение) и за решение) Все работает)))