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

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

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

Регистрация: Jul 2005
Сообщений: 84
Отправить сообщение для admGT с помощью ICQ
По умолчанию запуск выражения, записанного в переменной

Проблема в следующем:
в переменную записываю выражение, но при попытке проверить условие, заданное этим выражением, проверяется наличие переменной (см. код). Как поступить?


Код:
kk_=new Array(Key.CONTROL,Key.ENTER,Key.SHIFT)//например

if(kk_[2]){usl="Key.isDown("+kk_[0]+")&& Key.isDown("+kk_[1]+")&&Key.isDown("+kk_[2]+")";)
}

else if(kk_[1])usl="Key.isDown("+kk_[0]*1+")&&Key.isDown("+kk_[1]*1+")"; 
else 	usl="Key.isDown("+kk_[0]*1+")";


	Key.addListener(ls={});
ls.onKeyDown = function() {	

//*****************
if(usl)trace(usl) // Проверяет наличие переменной, но не отрабатывает usl 
//*******************
if (Key.isDown(Key.CONTROL)&&Key.isDown(Key.ENTER)&&Key.isDown(Key.SHIFT)){trace("123")} // срабатывает
//*******************
}

Старый 21.09.2006, 13:11
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 2  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Перепишите код так, чтобы он был понятен.

И вообще, я не понимаю, чем не угодило:

isDown = Key.isDown(keyArray[0]) && Key.isDown(keyArray[1]) && …

Более того, данное решение нерационально. Хотя бы потому что длина массива должна быть фиксирована.

Резюме: переписать.


Последний раз редактировалось etc; 21.09.2006 в 13:14.
Старый 21.09.2006, 13:20
admGT вне форума Посмотреть профиль Отправить личное сообщение для admGT Найти все сообщения от admGT
  № 3  
Ответить с цитированием
admGT

Регистрация: Jul 2005
Сообщений: 84
Отправить сообщение для admGT с помощью ICQ
По умолчанию Re

Код:
 
kk_=new Array(Key.CONTROL,Key.ENTER,Key.SHIFT) //массив в котором хранятся названия клавиш

if(kk_[2]){usl="Key.isDown("+kk_[0]+")&& Key.isDown("+kk_[1]+")&&Key.isDown("+kk_[2]+")"; //если в массиве 3 элемента создаем выражение для обработки 3-х клавиш и присваиваем переменной usl 
}

else if(kk_[1])usl="Key.isDown("+kk_[0]*1+")&&Key.isDown("+kk_[1]*1+")"; //если в массиве 2 элемента создаем выражение для обработки 2-х клавиш и присваиваем переменной usl 
else usl="Key.isDown("+kk_[0]*1+")";//если в массиве 1 элемент создаем выражение для обработки 1-ой клавиши и присваиваем переменной usl 

Key.addListener(ls={}); //инициализируем листнер
ls.onKeyDown = function() {//функция при нажатии клавиши
	if(usl)trace(usl) // необходимо чтобы работало, в реале проверяет наличие переменной usl и при нажатии любой клавиши выводит содержимое этой переменной
    if (Key.isDown(Key.CONTROL)&&Key.isDown(Key.ENTER)&&Key.isDown(Key.SHIFT)){trace("123") //собственно работает как надо
}
}
Нужно чтобы предпоследнее выражение отрабатывало, как последнее
Как этого добиться?

Старый 21.09.2006, 13:26
admGT вне форума Посмотреть профиль Отправить личное сообщение для admGT Найти все сообщения от admGT
  № 4  
Ответить с цитированием
admGT

Регистрация: Jul 2005
Сообщений: 84
Отправить сообщение для admGT с помощью ICQ
Код:
isDown = Key.isDown(keyArray[0]) && Key.isDown(keyArray[1]) && …
вроде то же, что и у меня, только короче

Код:
Более того, данное решение нерационально. Хотя бы потому что длина массива должна быть фиксирована.
массив, который я привел - элемент другого массива, элементы которого хранят от 1 до 3 клавиш. Я для простоты не стал приводить весь код.

Старый 21.09.2006, 13:46
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 5  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Цитата:
вроде то же, что и у меня, только короче
Не то же, совершенно.
Твоё «usl» является обычной строкой, а не булевым выражением.

Смотри в сторону eval, но лучше вообще переписать нормально.

Старый 21.09.2006, 13:59
admGT вне форума Посмотреть профиль Отправить личное сообщение для admGT Найти все сообщения от admGT
  № 6  
Ответить с цитированием
admGT

Регистрация: Jul 2005
Сообщений: 84
Отправить сообщение для admGT с помощью ICQ
а разве isDown является булевым выражением?
вроде без Key - это то же что и моя usl

Старый 21.09.2006, 14:09
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 7  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Цитата:
Сообщение от admGT
а разве isDown является булевым выражением?
После этого вопроса я отправляю вас читать хелп и больше писать сюда не буду.

Старый 21.09.2006, 14:41
admGT вне форума Посмотреть профиль Отправить личное сообщение для admGT Найти все сообщения от admGT
  № 8  
Ответить с цитированием
admGT

Регистрация: Jul 2005
Сообщений: 84
Отправить сообщение для admGT с помощью ICQ
тем не менее вопрос остался открытым. А хелп я читал. И выражение, которое Вы написали работает не лучше моего с usl

Старый 21.09.2006, 14:46
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 9  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Цитата:
Сообщение от admGT
А хелп я читал.
Не похоже.

Код:
Key.addListener(this);
onKeyDown = function() {
	trace('SPACE: '+Key.isDown(Key.SPACE));
	trace('CONTROL: '+Key.isDown(Key.CONTROL));
	trace('SPACE & CONTROL: '+(Key.isDown(Key.SPACE)&&Key.isDown(Key.CONTROL)));
}
Всё. Дальше разбирайтесь сами.

Старый 21.09.2006, 14:52
admGT вне форума Посмотреть профиль Отправить личное сообщение для admGT Найти все сообщения от admGT
  № 10  
Ответить с цитированием
admGT

Регистрация: Jul 2005
Сообщений: 84
Отправить сообщение для admGT с помощью ICQ
ок. Спасибо.


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

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

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


 


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


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