PDA

Просмотр полной версии : Остановка сценария в AS


Tigor
06.07.2006, 00:53
Доброго дня!
Может кто-то сталкивался с вопросом остановки выполнения сценария, написанного в AS2 на определённое время. Сценарий однокадровый. У меня никак не выходит написать для этого функцию, работающую через setInterval (мне кажется этот путь оптимальным). Вот мой последний вариант (к сожалению - нерабочий). Может кто сможет мне подсказать правильный путь:
if (!i) {
var i:Number = 0;
}
function func(i) {
i++;
trace(i);
return i;
}
setInterval(func, 1000, i);
По моим соображениям, трассировка должна выдавать секундные метки с увеличением на единицу, а выдаёт 1 постоянно.
Заранее спасибо!!!

etc
06.07.2006, 01:01
Однокадровый ас2? Такой бывает?

Tigor
06.07.2006, 01:09
Конечно бывает. Это называется централизованный скрипт. Всё выполняется независимо от timeline.

iNils
06.07.2006, 01:33
Конечно бывает. Это называется централизованный скрипт. Всё выполняется независимо от timeline.То что вы пишете это "бред". Скрипт выполняется в кадре в любом случаи. Я вам уже писал, чтобы функция невыполнялась, ее не нужно вызывать.

Tigor
06.07.2006, 03:00
Дорогой iNils, я отлично понял то, что Вы хотели мне сказать.
Все знают, что если есть в кадре скрипт, то он будет выполняться. Если не хочешь, чтобы функция не выполнялась - не запускай её. А есть сценарии, которым для выполнения не требуется timeline - это тоже реальность.
Я обратился на форум с конкретным вопросом и хотел бы услышать не менее конкретный ответ: "Есть ли возможность останавливать выполнение скрипта на определённое время, не прибегая к помощи timeline?" И всё...
Кому это кажется бредом?
Буду благодарен за практические советы и рекомендации по данному вопросу.

Nirth
06.07.2006, 03:04
Не вижу в моих словах "бреда". Все знают, что если есть в кадре скрипт, то он будет выполняться. Если не хочешь, чтобы функция не выполнялась - не запускай её. А есть сценарии, которым для выполнения не требуется timeline - это тоже реальность.

В флэше любой объект, любая функция, любой мувиклип имеет свой кадр на таймлайне ( покрайней мере в АС1-2, в ас3 все наоборот)
так что независомо от таймлайна ниче не работает, как бы это грустно не было.
даже setInterval зависит от FPS, хотя не понятно о чем думали разработчики

7thsky™
06.07.2006, 03:10
o = { i: 0, foo: function () { this.i++; trace ('>> ' + this.i); } };
setInterval (o, 'foo', 1000);

Nirth
06.07.2006, 03:13
да кстати однокадрового АС2 не бывает
АС2 пишется в классах, которые являются внешними файлами.

iNils
06.07.2006, 03:20
А есть сценарии, которым для выполнения не требуется timeline - это тоже реальность.
Я обратился на форум с конкретным вопросом и хотел бы услышать не менее конкретный ответ: "Есть ли возможность останавливать выполнение скрипта на определённое время, не прибегая к помощи timeline?" И всё...
Кому это кажется бредом?
Буду благодарен за практические советы и рекомендации по данному вопросу.Вы не можите взять и остановить выполнение любого скрипта. Я уже говорил, что думать о таких вещах надо заранее. Если вы не умеете читать, это не значит, что надо задавать один и тот же вопрос в разных топиках.

Nirth
06.07.2006, 03:23
я могу остановить любой сценарий в флэше

for(var i=-10000000;i<10000000;i++)
{
createEmptyMovieClip();
new XML();
mx.events.EventDispatcher.initialize(this)
//в зависимости от скорости процессора можно еще всяких функций навызывать
}

iNils
06.07.2006, 03:27
я могу остановить любой сценарий в флэше

for(var i=-10000000;i<10000000;i++)
{
createEmptyMovieClip();
new XML();
mx.events.EventDispatcher.initialize(this)
//в зависимости от скорости процессора можно еще всяких функций навызывать
}
Это не остановка, это зависание приложения.

7thsky™
06.07.2006, 03:30
я тоже могу остановить либой скрипт (только его потом запустить обратно не удастся)

function f () { f () }; f ();

iNils
06.07.2006, 03:41
я тоже могу остановить либой скрипт (только его потом запустить обратно не удастся)

function f () { f () }; f ();
дальше 256 не уйдет, но это не в счет, также как и то что Давид предложил.

Tigor
06.07.2006, 03:46
Огомная благодароность 7thsky за прекрасно работающий скрипт. Это как раз то, что я искал. Но не совсем понимаю его конструкцию:
o = { i: 0, foo: function () { this.i++; trace ('>> ' + this.i); } };
Если есть возможность и время, поясните что представляет собой о. Я ещё не настолько грамотен в AS.

iNils
06.07.2006, 03:49
Огомная благодароность 7thsky за прекрасно работающий скрипт. Это как раз то, что я искал. Но не совсем понимаю его конструкцию:
o = { i: 0, foo: function () { this.i++; trace ('>> ' + this.i); } };
Если есть возможность и время, поясните что представляет собой о. Я ещё не настолько грамотен в AS.
trace ("control point 1");
o = {i:0, foo:function () {
this.i++;
trace ('>> ' + this.i);
}};
setInterval(o, 'foo', 1000);
trace ("control point 2");
И что тут работающего?

Tigor
06.07.2006, 03:51
А Nirth-у могу заметить, что вопрос был не об однокадровом AS2, а об однокадровом сценарии.

Tigor
06.07.2006, 03:55
Проверь:
var j=10;
o = {i:0, foo:function () {
this.i++;
if (this.i<=j) {
trace('>> '+this.i);
}else {stop();}
}};
setInterval(o, 'foo', 1000);
Останавливается через 10 секунд.

iNils
06.07.2006, 04:01
Проверь:
var j=10;
o = {i:0, foo:function () {
this.i++;
if (this.i<=j) {
trace('>> '+this.i);
}else {stop();}
}};
setInterval(o, 'foo', 1000);
Останавливается через 10 секунд.Если вы хотели получить ЭТО, то я вам советую научиться ПРАВИЛЬНО формулировать вопросы.

Tigor
06.07.2006, 04:26
А что же было непонятного? Я с самого начала об этом говорил.
Возникла ещё одна сложность:
trace("start");
timer(10);
function timer(j):Void {
o = {i:0, foo:function () {
this.i++;
if (this.i<=j) {
trace('>> '+this.i);
} else {
clearInterval(id);
return;
}
}};
var id = setInterval(o, 'foo', 1000);
}
trace("finish");
Выводит start, finish, а уж затем метки времени. Разве скрипт выполняется не построчно?

Tigor
06.07.2006, 04:27
Всем приятной ночи!

Nirth
06.07.2006, 04:50
построчно, в данном случае он выполнился построчто.
ты вызвал функцию trace, потом вызвал функцию timer, которая создала интервал, сразу после вызова, ты вызвал функцию trace, она вызвалась, и потом каждую секунду вызывается твой таймер, как ты и записал

St. Father
06.07.2006, 08:28
А я тоже умею останавливать сценарии в кадре!!!!!

trace("a");
return
trace("b");

:D простите, не сдержался...

iNils
06.07.2006, 10:30
А что же было непонятного? Я с самого начала об этом говорил.
Обиатимся к самому вопросу:
Может кто-то сталкивался с вопросом остановки выполнения сценария, написанного в AS2 на определённое время.Из этого я сделал вывод, что ты хочешь начать выполнять сценарий, потом временно прекратить, а потом продолжить. Тот код который дал тебе 7thsky™, и который ты назвал тем "что тебе было нужно", этого не делает.

А фраза
Выводит start, finish, а уж затем метки времени. Разве скрипт выполняется не построчно? показывает, что ты не понимаешь суть работы setInterval.

7thsky™
06.07.2006, 12:38
дальше 256 не уйдет, но это не в счет, также как и то что Давид предложил.

Ну в том и фишка :) У Давида повиснет, а у меня больше ни один скрипт работать не будет :) Я же сказал что: "Что я тоже могу скрипты останавливать"

iNils
06.07.2006, 12:52
Ну в том и фишка :) У Давида повиснет, а у меня больше ни один скрипт работать не будет :) Я же сказал что: "Что я тоже могу скрипты останавливать"Проше скрипты вобще не писать :)