Форум 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=173698)

Bankomat 09.01.2012 19:48

как остановиться на время в кадре?
 
Доброго времени дня всем.

Всегда если нужно было выполнить задержку на кадре и по истечению времени выполнить какую либо функцию, использовал такой код

Код AS1/AS2:

var intervalID;
function callback() {
clearInterval(intervalID);
play();
}
intervalID = setInterval(callback, 3500);
stop();

но недавно столкнулся с проблемой, опишу кратко...

есть кадр(обозначим его Pervi) на нем ролик весит некоторое время, по истечению 3500 например как в примере, прыгает на кадр (100) ролика.
при это в кадре (pervi) есть кнопка которая при нажатии перемешает нас на кадр (50) ролика.
проблема в том что если мы нажимаем кнопку и попадаем в кадр 50, то нас через время отправляет в кадр (100) потому что как я понял время отсчета было запущено вместе с загрузкой кадра (pervi)

подскажите как избежать такой не приятной ситуации? что бы по нажатию кнопки, со временем нас не перекидывало в кадр (100)?

fish_r 09.01.2012 20:08

отлавливать нажатие кнопки и, если таймер запущен, останавливать его, или перезапускать - по ситуации

mooncar 09.01.2012 21:47

Код AS1/AS2:

var to:Number = setTimeout(go100, 3500);
 
btn.onRelease = function()
{
        clearTimeout(to);
        gotoAndStop(50);
};
 
function go100()
{
  gotoAndStop(100);
}


Bankomat 09.01.2012 21:48

Код AS1/AS2:

button.onPress = function ()
{
clearInterval(intervalID);
};

сделал так, вроде получил нужный эффект, спасибо



еще такой вопрос, подскажите как мне задать что бы функция
Код AS1/AS2:

gotoAndStop();

переключала меня случайным образом на 3 5 или 6 кадр к примеру?
насколько я понимаю нужно задать некую переменную которая выбирала случайно из набора 3 5 и 6, одно число из них случайно, а потом эту переменную подставить в gotoAndStop

но я не знаю как это осуществить в коде, подскажите..

Добавлено через 1 минуту
Цитата:

Сообщение от mooncar (Сообщение 1055771)
Код AS1/AS2:

var to:Number = setTimeout(go100, 3500);
 
btn.onRelease = function()
{
        clearTimeout(to);
        //...
};
 
function go100()
{
  gotoAndStop(100);
}


извините, когда отвечал не видел вашего поста, безусловна вам так же спасибо за помощь, ради интереса вашим методом обязательно попробую

mooncar 09.01.2012 21:51

Пожалуйста. Просто не надо использовать setInterval, если нужно только однократное отложенное исполнение.
Это дает setTimeout - по сути то же самое, только нет необходимости делать clear.

Bankomat 09.01.2012 22:00

Цитата:

Сообщение от mooncar (Сообщение 1055774)
Пожалуйста. Просто не надо использовать setInterval, если нужно только однократное отложенное исполнение.
Это дает setTimeout - по сути то же самое, только нет необходимости делать clear.

попробовал вашим способом, все работает, только кроме onRelease написал onPress, а то изза того что я не успеваю отжать мышку, он не запускает clearTimeout(to);

спасибо:)

Добавлено через 1 минуту
реально ли сделать переход с помощью gotoAndStop в случайный из заданных кадров?

mooncar 09.01.2012 22:19

Допустим, диапазон кадров 1 - 100, тогда
Код AS1/AS2:

var randomFrame:Number = Math.ceil(Math.random() * 100);        
gotoAndStop(randomFrame);

Добавлено через 3 минуты
Допустим, диапазон кадров 60 - 200, тогда

Код AS1/AS2:

var randomFrame:Number = (60 - 1) + Math.ceil(Math.random() * (200 - (60 - 1));        
gotoAndStop(randomFrame);


Котяра 09.01.2012 23:06

Код AS1/AS2:

var arr:Array = [3,5,6];
var index:Number = int(Math.random() * arr.length());       
gotoAndStop(arr[index]);


mooncar 09.01.2012 23:07

Для произвольных номеров, т.е. для непоследовательного диапазона кадров:
Код AS1/AS2:

var frames:Array = [3, 5, 8];
var randomFrame:Number = Math.ceil(Math.random() * frames.length);
gotoAndStop(frames[randomFrame -1]);

Пожалуй, так аккуратнее:
Добавлено через 6 минут
Код AS1/AS2:

var frames:Array = [3, 5, 8];
var randomFrame:Number = Math.floor(Math.random() * frames.length);
gotoAndStop(frames[randomFrame]);


Bankomat 09.01.2012 23:16

всем спасибо все работает=) всем +


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

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