PDA

Просмотр полной версии : как задать количество повторений движения


veles2008
09.12.2009, 12:06
Приветствую!

На сцене есть объект, кнопка (двигаться), кнопка (вперёд) поле ввода (сколько раз повторить движение) и кнопка пуск которая запускает движение объекта.

Нужно нажать "двигаться" потом "вперёд", потом указать "сколько раз повторить движение" и кнопку пуск после чего объект начинает движение которое мы задали.

Как сделать повторение?

fessor
09.12.2009, 17:11
сначала несколько вопросов
- одно движение вперед это будет смещение объекта в нужные координаты?
- счетчик движений уже сделан?
- про onEnterFrame(); уже читал?

mooncar
09.12.2009, 18:15
У автора пошаговое движение, не плавное, onEnterFrame тут не годится.
Детали все мне тоже не ясны, но должно быть что-то вроде этого:
var timeStep:Number = 1000; //1 сек.
var count:Number = 0; //счетчик шагов
var stepQuantity:Number = 0; //количество шагов
var moveStarted:Boolean = false ; //признак того, что движение стартовало

start_btn.onRelease = function () {
stepQuantity = Number(input_tf.text); //из текствого поля берется количество шагов
moveId = setInterval(moveIt, timeStep); //запусается движение, выполняющееся периодически с интервалом timeStep
}

function moveIt () {
var allowMove:Boolean = count <= stepQuantity && !isNaN(stepQuantity) && !moveStarted;
//проверка того, что:
// - счетчик не достиг конца
// - в поле было введено именно число, т.е. Number(input_tf.text) не даст NaN
// - движение уже не было начато
if (allowMove) {
moveStarted = true ;
//само движение
}
else {
clearInterval (moveId);
count = 0;
stepQuantity = 0;
moveStarted = false ;
}
}
Промежуточные кнопки типа направления и само движение тут не отражены, отражена только организация периодичности выполнения и легитимного старта движения.

veles2008
09.12.2009, 22:51
что то ничего не получается

Добавлено через 17 минут
попробую объяснить детали.

Нужно создать программиркуемого исполнителя. Который бы исполнял линейные, программы, программы с условием и циклические программы. Первые два уже сделаны. Остался цикл.
Так вот фрагмент программы с циклом: есть кнопки вперёд, повторить, сколько раз повторить, пуск.
При нажимании на эти кнопки можно организовывать следующие комбинации:
1.
Повторить
вперёд
3 раза
объект 3 раза передвигается вперёд
2.
Повторить
вперёд
вперёд
1 раз
объект 2 раза передвигается вперёд
3.
вперёд
повторить
вперёд
2 раза
вперёд
объект передвигается вперёд 4 раза

NoCD
09.12.2009, 23:32
Вводите в массив свои команды, а исполнитель будет читать инструкции из массива.

veles2008
09.12.2009, 23:42
Так это понятно, а как цикл в массив "всунуть" и что б он когда нужно повторился?
может кто исходник глянет?

NoCD
09.12.2009, 23:58
может кто исходник глянет?

А чего на swf глядеть, вопрос и так понятен.

Так это понятно, а как цикл в массив "всунуть" и что б он когда нужно повторился?

я бы извратился бы таким образом:

var command_Array = ["move:return2;move:return1","move:up2,return1",и т.д.]

соответственно команды можно будет выдирать с помощью substring.
move - вперед;
return2 - повторить действие два раза;
; - окончание первого действия
и т.д.

Вызывайте нужную функцию для решения нужной задачи.

veles2008
10.12.2009, 00:08
а если я задам повторить 100 раз, то 100 функций создавать нужно?

NoCD
10.12.2009, 00:37
а если я задам повторить 100 раз, то 100 функций создавать нужно?

Мдяяя.

функции являются действия, которыми будет пользоваться исполнитель. Функции создаются один раз, а вызываются сколько угодно раз. Создали вы например функцию для какого то действия и все, теперь только вызывайте её столько, сколько нужно раз. И не надо ничего сто раз создавать. Например вы хотите повторить одно и то же действие сто раз, то просто вызовите функцию, которую вы хотите исполнить и там она выполнит действия сто раз ориентируясь по командам, которые вы возьмете из массива

KiL33
10.12.2009, 09:58
Спешл фор Ю

Мега Трэш пример:D

В боксе выбираете "по прямой" > вперед/назад > число повторений .

Можно ещё выбрать "произвольное движение", это бонусом..бесплатно:D

И вот, кстати, похожая тема была
http://flasher.ru/forum/showthread.php?t=133518

veles2008
10.12.2009, 13:15
Спасибо, но это не то что нужно

Добавлено через 13 минут
Я сделал

function doMove (direct:String) {

switch (direct) {
case 'VPEROD' :
var ss1=Number(vp1.text);
bk._x += 20*ss1;
break;

case 'POV':
for (var ii:Number = 0; ii<pow1_var; pow1_var--) {
case '1VPEROD' :
var ss1=Number(vp1.text);
bk._x += 20*ss1;
}
break
}

}

Только при повторном запуске цикл не хочет повторятся. Почему?

Добавлено через 33 минуты
Всё, я понял. Всем спасибо!