Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript (http://www.flasher.ru/forum/forumdisplay.php?f=5)
-   -   Динамическое изменение interval в setInterval (http://www.flasher.ru/forum/showthread.php?t=41288)

Geniot 26.12.2002 18:56

Динамическое изменение interval в setInterval
 
В общем я все форумы облазил, про setInterval говорили много, но того, что мне надо, я так и не нашёл.
А надо мне следующее: я периодически выполняю функцию с помощью setInterval и хочу изменять параметр interval. Я пробовал динамически создавать эту функцию, а потом clearInterval, но что-то не получается.
(Открою секрет, этой функцией я опускаю кубик в тетрисе и мне нужно резко увеличивать скорость, когда нажимают стрелку вниз, а также изменять скорость в зависимости от уровня.)

Help will be much appreciated. If I ever finish programming this game, I promise to lay out its source code here at flasher.ru

Thanks

llllllllll 26.12.2002 19:38

и что там не получается?
 
time=1000;
setInterval( function(){ trace(time) }, _root.time );
this.onMouseDown=function(){
time+=100;
}

Geniot 26.12.2002 19:51

Ага, верно, да не верно!
 
Трейсит-то он нормально, мол, всё окей, тайм увеличили, но ведь трейсит-то он он по-прежнему с той-же скоростью! - 1 раз в секунду, а мне нужно, чтобы динамически скорость можно было увеличивать или уменьшать, а не эту переменную менять.

llllllllll 26.12.2002 20:06

и так не пашет?
 
id=setInterval( function(){ mc._x++; }, 1000 );
this.onMouseDown=function(){
clearInterval(id);
setInterval( function(){ mc._x++; }, 10 );
}

Geniot 26.12.2002 20:38

Так пашет, но эффективность?
 
Да, да, конечно, так пашет. Я тоже вчера на таком варианте остановился - отдельная функция для каждой скорости. Выходит мне таких нужно 10: 9 + 1- для падения. Я думал можно как-нибудь покороче.
Спасибо и на этом. До этого я не знал, что var id не обязательно объявлять перед id = setInterval();

llllllllll 26.12.2002 22:35

id нужен чтоб запомнить индивидуальный номер процесса возвращаемый при вызове steInterval, хотя можно и по номерам если не требуется чего-то более сложного:
setInterval(function(){mc1._x++},500);
setInterval(function(){mc2._x++},100);
this.onMouseDown = function(){ clearInterval(1)}
this.onMouseUp = function(){ clearInterval(2)}

Hirn 27.12.2002 03:36

В компоненте FListBox используется точно такойже принцип.
Код:

class.clickHandler = function(itmNum) {
        super.clickHandler(itmNum);
        if (this.dragScrolling == undefined && this.scrollBar_mc != undefined) {
                this.dragScrolling = setInterval(this, "dragScroll", 15);  
        };
};
class.dragScroll = function() {
        clearInterval(this.dragScrolling);  
        var yMouse = this.container_mc._ymouse;
        if (yMouse < 0) {
                this.scrollPosition--;
                this.selectionHandler(0);
                this.scrollInterval = Math.max(25, -23.8*(-yMouse) + 500);
                this.dragScrolling = setInterval(this, "dragScroll", this.scrollInterval);  
        } else if (yMouse > this._height) {
                this.scrollPosition++;
                this.selectionHandler(this.numDisplayed - 1);
                this.scrollInterval = Math.max(25, -23.8*Math.abs(yMouse-this._height) + 500);  
                this.dragScrolling = setInterval(this, "dragScroll", this.scrollInterval);
        } else {
                this.dragScrolling = setInterval(this, "dragScroll", 15); 
        };
};

и все работает за милую душу.


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

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