Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   как задать количество повторений движения (http://www.flasher.ru/forum/showthread.php?t=133619)

veles2008 09.12.2009 12:06

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

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

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

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

fessor 09.12.2009 17:11

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

mooncar 09.12.2009 18:15

У автора пошаговое движение, не плавное, onEnterFrame тут не годится.
Детали все мне тоже не ясны, но должно быть что-то вроде этого:
Код AS1/AS2:

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

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

NoCD 09.12.2009 23:58

Цитата:

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

Цитата:

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

Код AS1/AS2:

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

Вложений: 1
Спешл фор Ю

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

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

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

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

veles2008 10.12.2009 13:15

Спасибо, но это не то что нужно

Добавлено через 13 минут
Я сделал
Код AS1/AS2:

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 минуты
Всё, я понял. Всем спасибо!


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

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