PDA

Просмотр полной версии : как лучше организовать слежение???


robotech
22.01.2004, 18:01
Есть к примеру 30 переключателей, которые представляют собой мувиклип из двух кадров: в первом кадре кнопка перехода на второй кадр, во втором кадре кнопка перехода на первый. И есть некий мувик, который должен не проигрываться если не один из переключателей не включен (2-й кадр), а если один и более включено - мувик должен играть.
Как лучше организовать такое?

Fisher
22.01.2004, 19:03
На кнопе

1 кадр
on (release) {
_root.ok+=1;
}

2 кадр
on (release) {
_root.ok-=1;
}

На муве
onClipEvent (enterFrame) {
if (_root.ok>2) {
play();
} else {
stop();
}
}

robotech
22.01.2004, 19:21
Спасибо, я так и думал.
Только наверное лучше вот так:

В первом кадре фильма

_root.ok=0;

На кнопе

1 кадр
on (release) {
_root.ok+=1;
if (_root.ok>0) {
_root.muvik.play();
}
play();
}

2 кадр
on (release) {
_root.ok-=1;
if (_root.ok=0) {
_root.muvik.stop();
}
play();
}

На муве (_root.muvik) ничего.
Лучше запихну в функцию, а то потом облом менять код на сорока кнопках...

Или все таки оставить на мувике код

onClipEvent (enterFrame) {
if (_root.ok>0) {
play();
} else {
stop();
}
}
для страховки? А то говорят может не успеть присвоить значение и проверить...

Fisher
22.01.2004, 19:29
Да я просто общий прынцып обрисовал :)
Потести - поэксперементируй.

Nox Noctis
22.01.2004, 19:49
друзья мои, мы здесь программированием занимаемся, или, простите, чем ? :))

флажками программируем ?
про побитовые операции мы ничего не слышали ?
что такое ксор не знаем ?
где ваша фантазия ! :(

запускаем исходник, жмём любое количество кнопок - смотрим что получилось.

код из исходника:
// создаем 50 кнопок
for (var i = 0; i<50; i++) {
var neo = this.attachMovie("switch", "btn"+i, i);
// раскидываем кнопки от балды
neo._x = random(Stage.width);
neo._y = random(Stage.height);
// запоминаем индекс кнопки
neo.idx = i;
// на нажатие
neo.onRelease = function() {
// если кадр первый - идем во второй, и наоборот
this.gotoAndStop(this._currentframe-1 || 2);
// что такое XOR читаем в хэлпе ВНИМАТЕЛЬНО
_root.btest ^= 1 << this.idx;
};
}
// общий для кнопок флажок
btest = 0;
// следим за флажком
player.onEnterFrame = function() {
if (_root.btest) {
this.play();
} else {
this.stop();
}
};единственное ценное в этом коде помечено красным цветом. остальное - лирика.

что происходит - мы каждой кнопке даем индекс. при нажатии мы инвертируем один бит флажка btest. если все биты флажка равны нулю - то флажок будет false. если хоть один бит единица - то уже true.

по трудоемкости исполнения — такой вариант кода ниже плинтуса.
по гибкости — попробуйте придумать лучше.

robotech
22.01.2004, 20:12
СПАСЫБА, попробуем разобраться.
Токо это у меня не просто кнопки, а кнопки включающие и выключающие звук (присоедененный), и не раскиданны рандомом а в определенном порядке....
Миксер музыкальный короче.
Может кто кстати знает исходники миксеров, где все грамотно, програмно построено?

Nox Noctis
22.01.2004, 20:33
Оригинал написал(а) robotech
Токо это у меня не просто кнопки, а кнопки включающие и выключающие звук (присоедененный), и не раскиданны рандомом а в определенном порядкенет никакой разницы.

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

а то что у тебя кнопки еще кучу действий делают - это уже твое дело и к этом вопросу не относится.

Fisher
23.01.2004, 10:37
:)

robotech
23.01.2004, 13:07
Непонятна эта строка

this.gotoAndStop(this._currentframe-1 || 2);

а точнее принцип действия вот этого this._currentframe-1 || 2

Nox Noctis
23.01.2004, 13:42
это то же самое что
if (this._currentframe-1 == 0) {
this.gotoAndStop(2);
} else {
this.gotoAndStop(this._currentframe-1);
}только гораздо компактнее

Fisher
23.01.2004, 16:02
Вот это супер :) Обожаю такие штучки - на которых съэкономить можно :)

kompadre
15.02.2004, 22:23
сэкономить читабельность =)