Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 06.06.2013, 16:18
mAK08 вне форума Посмотреть профиль Отправить личное сообщение для mAK08 Найти все сообщения от mAK08
  № 1  
Ответить с цитированием
mAK08

Регистрация: Apr 2013
Сообщений: 44
По умолчанию IF не проверяет!

Опять проблема с IF! Сначала Код
Код AS3:
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;
}
Почему он не проверяет строчку ?
Код AS3:
if (dragg==false)
Без нее ничего не работает!!

Старый 06.06.2013, 16:25
СлаваRa вне форума Посмотреть профиль Отправить личное сообщение для СлаваRa Найти все сообщения от СлаваRa
  № 2  
Ответить с цитированием
СлаваRa
 
Аватар для СлаваRa

блогер
Регистрация: Feb 2008
Адрес: http://playtika.com
Сообщений: 1,119
Записей в блоге: 5
Отправить сообщение для СлаваRa с помощью ICQ Отправить сообщение для СлаваRa с помощью Skype™
какие образом он ее не проверяет?
метод stopdrag вызывается? чему равен dragg до блока if?

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

Старый 06.06.2013, 16:33
belv вне форума Посмотреть профиль Отправить личное сообщение для belv Найти все сообщения от belv
  № 3  
Ответить с цитированием
belv

Регистрация: Oct 2005
Сообщений: 217
когда вы нажали на мовиклип вы задали dragg = true; а в условии if заданно , если dragg равно false , только в этом случае условное выражение может вернуть значение true и выполнить код, еще приемник события стоит onFT вынести за пределы функции.

Старый 06.06.2013, 16:37
Rivexe вне форума Посмотреть профиль Отправить личное сообщение для Rivexe Найти все сообщения от Rivexe
  № 4  
Ответить с цитированием
Rivexe
 
Аватар для Rivexe

Регистрация: Jun 2013
Сообщений: 133
Как раз он её и проверяет, но не проходит дальше т.к. методе stardrag вы присвоили переменной dragg значение true.

Старый 06.06.2013, 16:41
mAK08 вне форума Посмотреть профиль Отправить личное сообщение для mAK08 Найти все сообщения от mAK08
  № 5  
Ответить с цитированием
mAK08

Регистрация: Apr 2013
Сообщений: 44
Код AS3:
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 .
- не надо использовать локальные методы для подписки на какие-либо события(лучше их вообще не использовать) - немного непонял...

Старый 06.06.2013, 16:47
Rivexe вне форума Посмотреть профиль Отправить личное сообщение для Rivexe Найти все сообщения от Rivexe
  № 6  
Ответить с цитированием
Rivexe
 
Аватар для Rivexe

Регистрация: Jun 2013
Сообщений: 133
Не останавливается, потому что не выполняется условие e.currentTarget.x == 67.95 && e.currentTarget.y == 48.
Заработало потому что isDrag = false у вас стало только когда вы отпустили кнопку мышки.

Старый 06.06.2013, 16:56
mAK08 вне форума Посмотреть профиль Отправить личное сообщение для mAK08 Найти все сообщения от mAK08
  № 7  
Ответить с цитированием
mAK08

Регистрация: Apr 2013
Сообщений: 44
- не надо использовать локальные методы для подписки на какие-либо события(лучше их вообще не использовать) можно ли это разъяснить?

Старый 06.06.2013, 17:11
Rivexe вне форума Посмотреть профиль Отправить личное сообщение для Rivexe Найти все сообщения от Rivexe
  № 8  
Ответить с цитированием
Rivexe
 
Аватар для Rivexe

Регистрация: Jun 2013
Сообщений: 133
Что именно, что такое локальные методы или почему их лучше не использовать?

Старый 06.06.2013, 17:13
belv вне форума Посмотреть профиль Отправить личное сообщение для belv Найти все сообщения от belv
  № 9  
Ответить с цитированием
belv

Регистрация: Oct 2005
Сообщений: 217
Честно говоря не понятно зачем Вам все эти манипуляции с isDrag .Изначально вы задаете значение false, при
нажатии задаете true , потом когда отпустили кнопку опять задали false и в условном операторе опять поменяли значение на true.

Код AS3:
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;
}
вот так все работает

Старый 06.06.2013, 17:32
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 10  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
можно ли это разъяснить?
Использовать локальные методы плохо потому, что после исполнения метода в котором они находятся, ссылок на них больше не остается и они становятся доступными для сборщика мусора, который, с большой вероятностью очень быстро их убьет.

Создать новую тему Ответ Часовой пояс GMT +4, время: 09:12.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 09:12.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.