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

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

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

Регистрация: Sep 2008
Сообщений: 158
По умолчанию записываем ходы потом исполняем

Приветствую!

Есть объект. Есть текстовое поле. И есть кнопки ходов которые указывают куда двигаться объекту: прямо, на право, на лево, назад.

При нажатии на каждую кнопку ход записывается в текстовое поле.

Как сделать чтобы потом объект выполнял ходы в той последовательности в которой они записаны в поле?

Добавлено через 3 минуты
...Чтобы ходы начинали выполняться при нажатии на 5 кнопку "Выполнить"?

Старый 23.11.2009, 18:17
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 2  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Речь о текстовом поле можно не вести, если указывают ходы именно кнопки и если поле служит только для индикации выбранного движения. Это лишняя для задачи информация.
А по сути задачи - сделайте так:
1. Определите массив.
2. При нажатии определенной кнопки забивайте в зависимости от того, какая кнопка нажата в массив определенное значение с помощью Array.push метода.
3. При нажатии кнопки выполнить - стартуется функция движения, данные для движения берутся последовательным перебором значений массива.
Несложно.

Старый 23.11.2009, 20:43
veles2008 вне форума Посмотреть профиль Отправить личное сообщение для veles2008 Найти все сообщения от veles2008
  № 3  
Ответить с цитированием
veles2008
 
Аватар для veles2008

Регистрация: Sep 2008
Сообщений: 158
Если не сложно, то может покажите?

Старый 23.11.2009, 20:55
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 4  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
А с чем именно трудность-то испытываете?
Можно, конечно, попробовать накидать, но поделитесь - что неясно в алгоритме, или что конкретно не получается? Или вы даже не пробовали?

Старый 23.11.2009, 22:02
veles2008 вне форума Посмотреть профиль Отправить личное сообщение для veles2008 Найти все сообщения от veles2008
  № 5  
Ответить с цитированием
veles2008
 
Аватар для veles2008

Регистрация: Sep 2008
Сообщений: 158
я ещё не очень понимаю работу с массивами ну и не знаю всех методов

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

Регистрация: Apr 2007
Сообщений: 1,369
Код AS1/AS2:
var a:Array = []; - создали массив
a.push(что-то запихнули в массив)
__________________
john

Старый 23.11.2009, 22:40
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 7  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Не знаете? Хороший повод узнать, я тоже не знал, да и не знаю всех.
Код AS1/AS2:
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 двигать в зависимости от цифрового кода.
Вложения
Тип файла: rar Запоминаем ходы, а потом двигаемся.rar (11.4 Кб, 35 просмотров)


Последний раз редактировалось mooncar; 23.11.2009 в 23:00.
Старый 23.11.2009, 23:06
veles2008 вне форума Посмотреть профиль Отправить личное сообщение для veles2008 Найти все сообщения от veles2008
  № 8  
Ответить с цитированием
veles2008
 
Аватар для veles2008

Регистрация: Sep 2008
Сообщений: 158
Огромное спасибо!!!!!

Да, кнопки на сцене. Тоесть это нужно, например, вместо
Код AS1/AS2:
case Key.LEFT :
нужно писать как то там...
Код AS1/AS2:
left.onRelease:
или вообще без case?

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

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Код AS1/AS2:
left_btn.onRelease = function() {
	var showDir:Number = setTimeout(showDirection, 100, 'LEFT'); 
	course.push('LEFT'); //запоминаем в массиве ход
}
case - это элемент условного оператора switch, естественно, все убираете, включая и саму первую функцию onKeyDown, и слушателя.
Оставляете вместо блока keyListener_obj.onKeyDown только четыре блока onRelease - по одному на каждую кнопку.

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

Регистрация: Sep 2008
Сообщений: 158
Спасибо!!
А можна последний вопрос?

Цитата:
можно еще блокировку кнопки на период движения
Как это сделать?

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

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

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


 


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


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