Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript (http://www.flasher.ru/forum/forumdisplay.php?f=5)
-   -   как лучше организовать слежение??? (http://www.flasher.ru/forum/showthread.php?t=53929)

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

Вложений: 1
друзья мои, мы здесь программированием занимаемся, или, простите, чем ? :))

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

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

код из исходника:
Код:

// создаем 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);
}

только гораздо компактнее


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

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