PDA

Просмотр полной версии : Динамическое изменение interval в setInterval


Geniot
26.12.2002, 18:56
В общем я все форумы облазил, про 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);
};
};

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