![]() |
|
||||||||||
|
|||||
|
Регистрация: Sep 2008
Сообщений: 158
|
Приветствую!
Есть объект. Есть текстовое поле. И есть кнопки ходов которые указывают куда двигаться объекту: прямо, на право, на лево, назад. При нажатии на каждую кнопку ход записывается в текстовое поле. Как сделать чтобы потом объект выполнял ходы в той последовательности в которой они записаны в поле? Добавлено через 3 минуты ...Чтобы ходы начинали выполняться при нажатии на 5 кнопку "Выполнить"? |
|
|||||
|
Модрон-ветеринар
|
Речь о текстовом поле можно не вести, если указывают ходы именно кнопки и если поле служит только для индикации выбранного движения. Это лишняя для задачи информация.
А по сути задачи - сделайте так: 1. Определите массив. 2. При нажатии определенной кнопки забивайте в зависимости от того, какая кнопка нажата в массив определенное значение с помощью Array.push метода. 3. При нажатии кнопки выполнить - стартуется функция движения, данные для движения берутся последовательным перебором значений массива. Несложно. |
|
|||||
|
Регистрация: Sep 2008
Сообщений: 158
|
Если не сложно, то может покажите?
![]() |
|
|||||
|
Модрон-ветеринар
|
А с чем именно трудность-то испытываете?
Можно, конечно, попробовать накидать, но поделитесь - что неясно в алгоритме, или что конкретно не получается? Или вы даже не пробовали? |
|
|||||
|
Регистрация: Sep 2008
Сообщений: 158
|
я ещё не очень понимаю работу с массивами ну и не знаю всех методов
|
|
|||||
|
Регистрация: Apr 2007
Сообщений: 1,369
|
__________________
john |
|
|||||
|
Модрон-ветеринар
|
Не знаете? Хороший повод узнать, я тоже не знал, да и не знаю всех.
var course:Array = new Array(); //массив с ходами var step:Number = 10; //шаг объекта var count:Number = 0; //нужно для учета прохода по индексам массива при движении //запись и индикация ходов, жмем клавиатуру var keyListener_obj:Object = new Object(); keyListener_obj.onKeyDown = function() { course_tf.text = ''; //стираем предыдущую выведенную в поле запись switch (Key.getCode()) { case Key.LEFT : var showDir:Number = setTimeout(showDirection, 100, 'LEFT'); //с отсрочкой в 100 мс показываем, что нажали course.push('LEFT'); //запоминаем в массиве ход break ; case Key.UP : var showDir:Number = setTimeout(showDirection, 100, 'UP'); course.push('UP'); break ; case Key.RIGHT : var showDir:Number = setTimeout(showDirection, 100, 'RIGHT'); course.push('RIGHT'); break ; case Key.DOWN : var showDir:Number = setTimeout(showDirection, 100, 'DOWN'); course.push('DOWN'); break ; } }; Key.addListener(keyListener_obj); //индицирует записываемый ход function showDirection (dir:String) { course_tf.text = dir; } //активирует старт движения doit_btn.onRelease = function () { moveMc = setInterval(moveIt, 500); course_tf.text = 'ДВИЖЕНИЕ!'; } //определяет характер движения function moveIt () { if (count < course.length) { //если записи не кончились, продолжаем движение, считывая направление из очередной ячейки массива doMove (course[count]); count++; } else { clearInterval (moveMc); //останавливаем движение count = 0; //сбрасываем счетчик course_tf.text = 'КОНЕЦ ДВИЖЕНИЯ'; for (i in course) { course.splice(i); //очищаем массив } } } //непосредственно двигает мувик function doMove (direct:String) { switch (direct) { case 'LEFT' : mc._x -= step; break ; case 'UP' : mc._y -= step; break ; case 'RIGHT' : mc._x += step; break ; case 'DOWN' : mc._y += step; break ; } } Для этого каждый блок из первой функции со switch нужно будет загнать в onRelease соответственной кнопки, и убрать слушателя keyListener_obj. Да и еще уберите если нужно лишнее. А если делаете что-то вроде игры - можно еще блокировку кнопки на период движения, чтобы повтора не случилось, и т.д. PS. Можно сделать и проще, но я все расписал, чтобы проще для понимания было. Например, упразднить первый switch и вводить в массив сразу Key.getCode(), а во втором switch двигать в зависимости от цифрового кода. Последний раз редактировалось mooncar; 23.11.2009 в 23:00. |
|
|||||
|
Регистрация: Sep 2008
Сообщений: 158
|
Огромное спасибо!!!!!
Да, кнопки на сцене. Тоесть это нужно, например, вместо нужно писать как то там... или вообще без case? |
|
|||||
|
Модрон-ветеринар
|
left_btn.onRelease = function() { var showDir:Number = setTimeout(showDirection, 100, 'LEFT'); course.push('LEFT'); //запоминаем в массиве ход } Оставляете вместо блока keyListener_obj.onKeyDown только четыре блока onRelease - по одному на каждую кнопку. |
|
|||||
|
Регистрация: Sep 2008
Сообщений: 158
|
Спасибо!!
А можна последний вопрос? Цитата:
|
![]() |
![]() |
Часовой пояс GMT +4, время: 12:00. |
|
|
« Предыдущая тема | Следующая тема » |
|
|