![]() |
|
||||||||||
|
|||||
|
Регистрация: Sep 2011
Сообщений: 7
|
Доброе время суток, уважаемые форумчане. решил я тут собрать редактор квестов. при попытке связать область выполнения с менеджером кнопок, возникло пару вопросов(моя память говорит, что где-то я уже видел реализацию всего этого, но из-за разных мыслей не могу придумать толковое описание каждого из вопросов):
1) можно ли повесить внешнего(относительно класса) слушателя событий на изменение переменной без использования EnterFrame?{есть у меня менеджер кнопок, в зависимости от нажатой кнопки на цене выполняется действие. номер нажатой кнопки хранится во внутренней переменной(доступной внешне только для чтения) можно ли отслеживать изменение переменной с главной сцены, не добавляя обработчик EnterFrame?} 2) что менее нагрузит систему: HitTest или слушатель клика мыши?{на сцене, локации отображаются точками. что будет выигрышнее: 1-повесить на всю сцену слушателя клика мыши, и искать локацию, на которую кликнули hitTest ом или же повесить на каждую локацию свой собственный слушатель клика мыши?} |
|
|||||
|
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. |
|
|||||
|
Регистрация: Sep 2011
Сообщений: 7
|
Цитата:
Цитата:
появился еще 1 вопрос: возможно ли использовать строку, как строку ввода логических условий?{есть 3 переменные: p1, p2, p3, и 2 строки: в первой строке пользователь задает условие((p1!=p2) and (p1>5)) во второй - действие (p3=p1*p2)} Последний раз редактировалось boyard; 20.09.2013 в 11:50. |
|
|||||
|
можно но придется ручками написать парсер таких строк
__________________
return this... |
|
|||||
|
[+1 25.10.13]
[+4 18.03.14] |
Для ввода условий можно использовать булевы переменные и даже затолкать их в словарь
|
|
|||||
|
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
Цитата:
|
|
|||||
|
На счёт событий
Добавлено через 1 минуту скорей всего нужно самому посылать событие ребёнку, либо сделать метод для этого действия, либо подписывать родителя у ребёнка. Добавлено через 5 минут если это ДО 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. |
|
|||||
|
Регистрация: Sep 2011
Сообщений: 7
|
думал что есть что-то встроенное... значит снова будем писать парсер.
|
|
|||||
|
Вот нечего было делать, наваял вам небольшой парсер, работает только с условием AND нет проверок на пробелы, вообще м как, примерно показал.
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. |
|
|||||
|
Регистрация: Feb 2012
Сообщений: 1,540
|
Мои глаза!!!
|
![]() |
![]() |
Часовой пояс GMT +4, время: 20:05. |
|
|
« Предыдущая тема | Следующая тема » |
|
|