Просмотр полной версии : как лучше организовать слежение???
robotech
22.01.2004, 18:01
Есть к примеру 30 переключателей, которые представляют собой мувиклип из двух кадров: в первом кадре кнопка перехода на второй кадр, во втором кадре кнопка перехода на первый. И есть некий мувик, который должен не проигрываться если не один из переключателей не включен (2-й кадр), а если один и более включено - мувик должен играть.
Как лучше организовать такое?
На кнопе
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();
}
}
для страховки? А то говорят может не успеть присвоить значение и проверить...
Да я просто общий прынцып обрисовал :)
Потести - поэксперементируй.
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
Токо это у меня не просто кнопки, а кнопки включающие и выключающие звук (присоедененный), и не раскиданны рандомом а в определенном порядкенет никакой разницы.
тебе из моего примера нужны две строчки выделенные красным цветом. остальное я сделал только для наглядности.
а то что у тебя кнопки еще кучу действий делают - это уже твое дело и к этом вопросу не относится.
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);
}только гораздо компактнее
Вот это супер :) Обожаю такие штучки - на которых съэкономить можно :)
kompadre
15.02.2004, 22:23
сэкономить читабельность =)
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.