Вход

Просмотр полной версии : работа с Boolean


Musatoff
17.06.2008, 18:10
Привет, братцы! :)
Такой Q: Как поставить слушателя или както по другому реализовать прослушку Boolean, то есть если оно равно True, то делаем то, а если False то другое. Знаю как можно сделать через интервал, но грузит.

var MyHideBool:Boolean = new Boolean
if (MyHideBool= true) {
playback.HideBtn.onRelease = function(){
this.gotoAndStop(2)
MyHideBool= false
}
if (MyHideBool= false) {
playback.HideBtn.onRelease = function(){
this.gotoAndStop(3)
MyHideBool= true
}

Здесь срабатывает только первое, то есть не ставиться false на мою Boolean.
P.S. сколько не смотрел хелпов, не врубаюсь как юзать EventListener и Listener и чем они отличаются, если у кого есть статейка например, если не трудно скиньте или направьте меня куда нить.

fljot
17.06.2008, 18:24
во-первых, приведённый код даже невалиден

по проблеме:
я бы сделал сеттер для булевой переменной. и диспатчил бы событие
про события http://racer242.blogspot.com/2008/02/eventdispatcher-as2.html
про сеттеры http://flash-ripper.com/archives/000308.php

iNils
17.06.2008, 18:26
1. Булево значение, лучше задавть так
var myHideBool:Boolean = false;
а new Boolean создает объект
var myHideBool:Boolean = new Boolean ();
trace (typeof myHideBool); //object
2. Во флеше принято с большой буквы писать только названия классов и интерфейсов, а свойства и метода с маленькой
3. Для надо использовать оператор "==", а не "=", которые является присваиванием
4. Зачем в данном коде вообще нужен слушатель? Вам нужен метод watch
var myHideBool:Boolean = false;
this.watch ("myHideBool", test);
function test (prop, oldVal, newVal) {
trace (prop + " change from '" + oldVal + "' on '" + newVal + "'");
}
myHideBool = true;
5. Вообще, ваш код выглядит весьма странно, если я правильно понял смысл затеи, то должно быть так:
var myHideBool:Boolean = false;
playback.HideBtn.onRelease = function () {
if (myHideBool) {
this.gotoAndStop (2);
} else {
this.gotoAndStop (3);
}
myHideBool = !myHideBool;
};

Musatoff
17.06.2008, 18:38
2iNils, Спасибо, друг! Простите за такой код, я только учусь!
1.Я не понимаю немного про watch, то есть он как бы постоянно наблюдает за какой-то функцией?? я почитал в хелпе, исходя из него мы смотрим не меняется ли myHideBool, а причем тут test function?
2. Про myHideBool = !myHideBool не уловил, сорри если надоедаю, но очень интересно в чем фишка и как пишут код профессионалы.
P.S. Я представляю если дать мой код одной программки профу, что он с ним сделает, у меня там 1500 строк =)

iNils
17.06.2008, 18:46
1. watch наблюдает за свойством объекта, а функция test выполняет какие то действия при изменении свойства, иначе заме наблюдать?:)
2. По сколько булева переменная может примимать только два значения, то строка myHideBool = !myHideBool инвертирует текущее значение и переприсваивает его.

Musatoff
18.06.2008, 11:08
Thank you, dude! Слушь а не подскажешь как сделать например так, по щелчку мыши было одно действие а по второму щелчку другое. Я видел один раз в каком-то примере там были знаки "||"

iNils
18.06.2008, 11:17
См. пример в посте номер 3, код в пункте 5.

Musatoff
18.06.2008, 11:22
Я не это имел ввиду. =) Без if и else, там по-моему еще было click. Я весь хелп перерыл, и безуспешно.

iNils
18.06.2008, 11:26
Можно найти 100 и 1 способ без if и else и потратить на это годы, только вот вопрос - зачем, когда все делается с банальным if и else? Они собственно для этого и предназначены.

Musatoff
18.06.2008, 12:11
блин. просто тот способ который я видел был вообще простой, типа четный клик на кнопку делаем это, нечетный то. Ну ладно все равно спасибко!

silin
18.06.2008, 12:27
ты сам усложнил задачу, спросив про прослущку
а выходит, что нужно-то только менять значение флага в том же обработчике:
playback.HideBtn.onRelease = function(){
myHideBool = !myHideBool;
this.gotoAndPlay(myHideBool ? 2:3);
}