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

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

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

Регистрация: Sep 2011
Сообщений: 7
По умолчанию редактор квестов

Доброе время суток, уважаемые форумчане. решил я тут собрать редактор квестов. при попытке связать область выполнения с менеджером кнопок, возникло пару вопросов(моя память говорит, что где-то я уже видел реализацию всего этого, но из-за разных мыслей не могу придумать толковое описание каждого из вопросов):
1) можно ли повесить внешнего(относительно класса) слушателя событий на изменение переменной без использования EnterFrame?{есть у меня менеджер кнопок, в зависимости от нажатой кнопки на цене выполняется действие. номер нажатой кнопки хранится во внутренней переменной(доступной внешне только для чтения) можно ли отслеживать изменение переменной с главной сцены, не добавляя обработчик EnterFrame?}
2) что менее нагрузит систему: HitTest или слушатель клика мыши?{на сцене, локации отображаются точками. что будет выигрышнее: 1-повесить на всю сцену слушателя клика мыши, и искать локацию, на которую кликнули hitTest ом или же повесить на каждую локацию свой собственный слушатель клика мыши?}

Старый 20.09.2013, 02:57
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 2  
Ответить с цитированием
Akopalipsis
Banned
[+4 24.02.14]
[+4 07.11.13]
[+ 13.03.14]

Регистрация: Mar 2013
Сообщений: 1,864
Мне кажется, что для отслеживания изменения какой либо переменной есть только два способа - сделать сеттер и при его изменении посылать событие. И ещё есть биндинг http://blog.diestro.ru/binding-v-actionscript-1/
И наверное лучше повесить слушателя на мышь и там проверять target.

Старый 20.09.2013, 10:41
boyard вне форума Посмотреть профиль Отправить личное сообщение для boyard Найти все сообщения от boyard
  № 3  
Ответить с цитированием
boyard

Регистрация: Sep 2011
Сообщений: 7
Цитата:
Сообщение от Akopalipsis Посмотреть сообщение
Мне кажется, что для отслеживания изменения какой либо переменной есть только два способа - сделать сеттер и при его изменении посылать событие. И ещё есть биндинг http://blog.diestro.ru/binding-v-actionscript-1/
dispatchEvent() уже побывал, у меня почему-то не хочет установить связь между 2 предками одного родителя...
Цитата:
Сообщение от Akopalipsis Посмотреть сообщение
И наверное лучше повесить слушателя на мышь и там проверять target.
спасибо, совсем упустил из вида target(хотя буквально в соседнем классе активно его использую);

появился еще 1 вопрос: возможно ли использовать строку, как строку ввода логических условий?{есть 3 переменные: p1, p2, p3, и 2 строки: в первой строке пользователь задает условие((p1!=p2) and (p1>5)) во второй - действие (p3=p1*p2)}


Последний раз редактировалось boyard; 20.09.2013 в 11:50.
Старый 20.09.2013, 12:23
AlexCooper вне форума Посмотреть профиль Отправить личное сообщение для AlexCooper Найти все сообщения от AlexCooper
  № 4  
Ответить с цитированием
AlexCooper
 
Аватар для AlexCooper

Регистрация: Sep 2008
Адрес: Черкассы
Сообщений: 1,167
Записей в блоге: 1
Отправить сообщение для AlexCooper с помощью ICQ Отправить сообщение для AlexCooper с помощью Skype™
Цитата:
Сообщение от boyard Посмотреть сообщение
появился еще 1 вопрос: возможно ли использовать строку, как строку ввода логических условий?{есть 3 переменные: p1, p2, p3, и 2 строки: в первой строке пользователь задает условие((p1!=p2) and (p1>5)) во второй - действие (p3=p1*p2)}
можно но придется ручками написать парсер таких строк
__________________
return this...

Старый 20.09.2013, 14:54
Babylon вне форума Посмотреть профиль Отправить личное сообщение для Babylon Посетить домашнюю страницу Babylon Найти все сообщения от Babylon
  № 5  
Ответить с цитированием
Babylon
[+1 25.10.13]
[+4 18.03.14]
 
Аватар для Babylon

Регистрация: Jan 2006
Адрес: Москва, Зеленоград
Сообщений: 653
Отправить сообщение для Babylon с помощью ICQ
Для ввода условий можно использовать булевы переменные и даже затолкать их в словарь

Старый 20.09.2013, 16:28
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 6  
Ответить с цитированием
Akopalipsis
Banned
[+4 24.02.14]
[+4 07.11.13]
[+ 13.03.14]

Регистрация: Mar 2013
Сообщений: 1,864
Цитата:
у меня почему-то не хочет установить связь между 2 предками одного родителя...
А у меня тоже вопрос появился - можно как то событие детьми ловить?

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

Регистрация: Sep 2008
Адрес: Черкассы
Сообщений: 1,167
Записей в блоге: 1
Отправить сообщение для AlexCooper с помощью ICQ Отправить сообщение для AlexCooper с помощью Skype™
На счёт событий

Добавлено через 1 минуту
скорей всего нужно самому посылать событие ребёнку, либо сделать метод для этого действия, либо подписывать родителя у ребёнка.

Добавлено через 5 минут
если это ДО
Код AS3:
import flash.display.Sprite;
import flash.events.Event;
 
var papa:Sprite = new Sprite();	
var child:Sprite = new Sprite();
 
papa.addChild(child);
 
papa.addEventListener('event', function(e:Event){ trace('papa')} );
child.addEventListener('event', function(e:Event){ trace('child')} );
 
child.parent.addEventListener('event', function(e:Event){ trace('papa child')} );
 
child.dispatchEvent(new Event('event')); // child
papa.dispatchEvent(new Event('event')); 
// papa
// papa child
__________________
return this...


Последний раз редактировалось AlexCooper; 20.09.2013 в 16:55.
Старый 20.09.2013, 18:07
boyard вне форума Посмотреть профиль Отправить личное сообщение для boyard Найти все сообщения от boyard
  № 8  
Ответить с цитированием
boyard

Регистрация: Sep 2011
Сообщений: 7
Цитата:
Сообщение от AlexCooper Посмотреть сообщение
можно но придется ручками написать парсер таких строк
думал что есть что-то встроенное... значит снова будем писать парсер.

Старый 20.09.2013, 19:23
AlexCooper вне форума Посмотреть профиль Отправить личное сообщение для AlexCooper Найти все сообщения от AlexCooper
  № 9  
Ответить с цитированием
AlexCooper
 
Аватар для AlexCooper

Регистрация: Sep 2008
Адрес: Черкассы
Сообщений: 1,167
Записей в блоге: 1
Отправить сообщение для AlexCooper с помощью ICQ Отправить сообщение для AlexCooper с помощью Skype™
Вот нечего было делать, наваял вам небольшой парсер, работает только с условием AND нет проверок на пробелы, вообще м как, примерно показал.

Код AS3:
 
var fLib:Object = new Object();
	fLib['=='] = ravno;
	fLib['!='] = neravno;
	fLib['>'] = bolshe;
	fLib['<'] = menshe;
 
function bolshe(arg:Array):Boolean {
	return arg[0]>arg[1];
}
 
function menshe(arg:Array):Boolean {
	return arg[0]<arg[1];
}
 
function ravno(arg:Array):Boolean {
	return arg[0]==arg[1];
}
 
function neravno(arg:Array):Boolean {
	return arg[0]!=arg[1];
}
 
var variables:Object = new Object();
	variables['p1'] = 1;
	variables['p2'] = 2;
	variables['p3'] = 2;
 
var commandLine = '(p1!=p2) AND (p2==p3) AND (p1<2)';
 
var resultCommand:Boolean = interpretator(commandLine);
 
trace(resultCommand); // true
 
function interpretator(line:String):Boolean {
 
	var funcTemp:Array = new Array();
 
	var funcDump:Array;
 
	// разбиваем на логические И
	var ifDump:Array = line.split('AND');
 
	var resultDump:Array = new Array();
 
	var result:Array = new Array();
 
	// проходим по логическим составным
	for each( var subcommand:String in ifDump) {
 
		// ищем функции
		for ( var func:String in fLib) {
 
			// разбиваем на элементы 
			funcDump = subcommand.split(func);
 
			// если два и более элемента значит нужно выполнить эту логическую функцию
			if (funcDump.length>1) {
 
 
				if (!resultDump[func]) resultDump[func] = new Array();
 
				// парсим переменные
				variableParser(funcDump);
 
				// результаты в массив
				resultDump[func].push(funcDump);
			}
		}
	}
 
	// выполняем функции
	for ( func in resultDump) {
 
		// пока есть элементы 
		while (resultDump[func].length) {
 
			// выбираем по парам и выполняем соответсвующию функцию
			result.push(fLib[func]( resultDump[func].shift() ) );
		}
 
	}
 
	// только для условия И ( нужно доработать )
	var resultBoolean:Boolean = true; 
 
	for each( var resB:Boolean in result ) {
 
		if (resultBoolean) resultBoolean = resB;
	}
 
	return resultBoolean;
}
 
function variableParser(arr:Array):void {
 
	// проходим все пары элементов
	for ( var i:uint = 0; i <arr.length ; i++) {
 
		var varIndex:String;
 
		var ind:Number;
 
		if (i%2) {
			// если элемент после знака оператора то ищем дугу 
			ind = String(arr[i]).indexOf(')');
 
			// режем текст до дуги
			varIndex = String(arr[i]).substr(0,ind);
 
		} else {
			// если элемент перед оператором
			ind = String(arr[i]).lastIndexOf('(');
 
			// режем текст с начала строки до дуги
			varIndex = String(arr[i]).substr(ind+1,String(arr[i]).length);
		}
 
		// находим переменную и переопределяем массив
		arr[i] = (variables[varIndex]) ? variables[varIndex] : varIndex;
 
	}
 
}
__________________
return this...


Последний раз редактировалось AlexCooper; 20.09.2013 в 19:37.
Старый 20.09.2013, 21:10
MikroAcse вне форума Посмотреть профиль Отправить личное сообщение для MikroAcse Найти все сообщения от MikroAcse
  № 10  
Ответить с цитированием
MikroAcse
 
Аватар для MikroAcse

Регистрация: Feb 2012
Сообщений: 1,540
Код AS3:
fLib['=='] = ravno;
	fLib['!='] = neravno;
	fLib['>'] = bolshe;
	fLib['<'] = menshe;
Мои глаза!!!

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

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

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


 


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


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