Просмотр полной версии : кнопки не реагируют
Всех с праздниками!!!
помогите разобраться в следующем
пишу такой код:
count=0;
function chek() {
if (count<=7) {
_root.attachMovie("btn_mc", "btn_mc"+count, count, {_x:(count+1)*100, _y:535});
count++;
}
}
var interval = setInterval(chek, 500);
мувик btn_mc содержит кнопу btn. далее пишу следуещее:
for (i=0; i<=7; i++) {
_root["btn_mc"+i].btn.onRelease = function() {
бла бла бла
}
};
}
результат - кнопы не работают
где я не прав?
99% -- не учел, что у у кнопок нет своего Таймлайна, а значит, this у них указывает на родительский.
А вообще за использование Button надо отрывать руки. Мувиклипы имеют все то же, и куда больше.
Antares, главное не нервничай.
1. btn теперь не кнопа, а мувик - результат тот же.
2. где у меня this и причем здесь Таймлайн?
K.A.T.A.F.A.L.K.E.R
03.01.2006, 17:32
_root["btn_mc"+i].btn.onRelease = function() {
бла бла бла
}
а шо они с таким кодом вообще делать должны?
С праздниками! :D
K.A.T.A.F.A.L.K.E.R
03.01.2006, 17:34
погодь, а ты в каком порядке все это делаешь? Сначала описываешь действия а потом дублируешь? И вообще - не проще ли назначать действие сразу при создании???
K.A.T.A.F.A.L.K.E.R
03.01.2006, 17:37
А вообще за использование Button надо отрывать руки. Мувиклипы имеют все то же, и куда больше.
подписываюсь под этими словами. Единственный случай когда можно было бы юзать button - когда нужно че-то по-быстрому потестить (нарисовать прямоугольничек, сделать из него кнопку и написать on(release) быстрее чем еще и имя задавать :D )...
я ж, блин, написал - от кнопок избавился
действо слишком закручено
stop();
count = 0;
num = -1;
act = 0;
ims = ["sorry.swf", "sorry.swf", "sorry.swf", "galrus.swf", "sorry.swf", "sorry.swf", "GuestBook1.swf", "sorry.swf"];
itms = ["ГЛАВНАЯ", "БИОГРАФИЯ", "МУЗЫКА", "ФОТО", "ВИДЕО", "ЛИРИКА", "ГОСЕТВАЯ", "КОНТАКТЫ"];
this.onEnterFrame = function() {
this.ground._xscale<100 ? (this.ground._xscale += 5) : (this.ground._xscale=100, delete this.onEnterFrame);
};
_root.createEmptyMovieClip("container", _root.getNextHighestDepth());
function preload(num) {
container.createEmptyMovieClip("img", 0);
this.attachMovie("line", "line", 100);
line._x = _root._width/2;
line._y = 310;
line.bar._xscale = 0;
if (num != numb) {
container.img.loadMovie(ims[num]);
numb = num;
this.onEnterFrame = function() {
var l = container.img.getBytesLoaded();
var t = container.img.getBytesTotal();
prc = (l/t)*100;
line.bar._xscale = prc;
line.txt = int(prc)+" %";
if (l && t && l>=t) {
line.removeMovieClip();
this.onEnterFrame = null;
container.fadeIn();
}
};
}
}
MovieClip.prototype.In = function() {
this.onEnterFrame = function() {
this._x = 10;
this._y = 85;
this._alpha<100 ? (this._alpha += 10, act=true) : (this._alpha=100, delete this.onEnterFrame, act=false);
};
};
function Out() {
this.onEnterFrame = function() {
container._alpha>0 ? (container._alpha -= 10, act=true) : (delete this.onEnterFrame, act=false, removeMovieClip(img), preload(num));
};
}
function chek() {
if (count<=7) {
_root.attachMovie("btn_mc", "btn_mc"+count, count, {_x:(count+1)*100, _y:535});
//в btn_mc у меня МУВИК c dinamic text
_root["btn_mc"+count].btn.item = itms[count];
count++;
}
}
var interval = setInterval(chek, 500);
for (i=0; i<=7; i++) {
_root["btn_mc"+i].btn.onRelease = function() {
if (num != this.i && !act) {
num = this.i;
Out();
}
};
}
K.A.T.A.F.A.L.K.E.R
03.01.2006, 18:07
йпрст
function chek() {
if (count<=7) {
_root.attachMovie("btn_mc", "btn_mc"+count, count, {_x:(count+1)*100, _y:535});
//в btn_mc у меня МУВИК c dinamic text
_root["btn_mc"+count].btn.item = itms[count];
count++;
}
}
var interval = setInterval(chek, 500);
for (i=0; i<=7; i++) {
_root["btn_mc"+i].btn.onRelease = function() {
//действительно блаблабла
trace(this) - сделай ТАК! И будет тебе 8 undefined - ов!!! Нету еще в этот момент этих мувиков, НЕТУ! Их создаст твой check через 500*8/1000 = 4 сек! Принцип прост: утром деньги - вечером стулья!!!
}
};
K.A.T.A.F.A.L.K.E.R
03.01.2006, 18:10
Сделай так...
function chek() {
if (count<=7) {
_root.attachMovie("btn_mc", "btn_mc"+count, count, {_xcount+1)*100, _y:535});
_root["btn_mc"+count].btn.item = itms[count];
_root["btn_mc"+count].btn.onRelease = function() {
бла бла бла
}
count++;
}
}
var interval = setInterval(chek, 500);
А лучше все перепиши... Как-то оно сложно читается... Я так и не понял что оно все делает... :confused:
K.A.T.A.F.A.L.K.E.R
03.01.2006, 18:21
а надо чтоб были
как?
надо. Я ж тебе написал как. При создании их (когда делаешь attach) сразу после аттача и прописывай им действие. Смотри пост выше.
так тож пробовал
глянь исходник
K.A.T.A.F.A.L.K.E.R
03.01.2006, 18:37
Проверил. Действие срабатывает (если при создании прописывать). Не работает все остальное... Короче, перепиши скрипт! Ерунда ведь полная... :rolleyes:
С прелоадерами не может быть косяков. Загрузились -- встаем в кадр, где все и инициализируем. Или если грузим runtime -- то в обработчике MovieClipLoader инициализируем. И все. Моментов, когда это не помогает, просто не существует.
вот уж все остальное точно рабочее
У тебя не действо закручено, а культура кодирования отсутствует. Ключевое слово var, видимо, придумали просто так? Код разделяютна логические блоки тоже просто так? Абсолютной адресации на каждом шагу советуют избегать тоже шутки ради.
Что такое дебаггер, а уж тем более XRay Tool ты не знаешь. Еще бы тут все отлаживалось быстро и ошибок не было. Дело в другом -- цели посещения форума.
Тебе надо, чтобы сделали за тебя. Тебе помогли раз, помогли два, ты кричишь "Не работает! вот смотри!!!" -- и ждешь, пока человек еще раз посмотрит и напишет тебе что-нибудь.
Задумайся.
Вчера видел на Ультрашоке тред, где человек написал примерно так:
"Вот мой код, он не работает, как должен. Я не прошу мне выкладывать примеры, просто скажите, в каких строках искать..."
Мне искренне захотелось с ним познакомиться. Но на флэшер.ру этого не будет никогда. "Рашша -- халявная страна" (с)
Antares, я не прошу делать за меня.
Суть вопроса в том же, что и у человека с ультрашока,
только вот мне почему-то не указываешь в каких строках искать, а только портишь настроение.
Менять всю функцию check и логику проверки. Каждый раз загрузив ролик надо увеличивать счетчик и вызывать проверку. В существующем коде разумными исправлениями добиться ничего нельзя.
сделал так и все заработало:
function chek() {
if (count<=7) {
_root.ground.attachMovie("btn_mc", "btn_mc"+count, count, {_x:(count+1)*100, _y:25});
_root.ground["btn_mc"+count].btn.item = items[count];
count++;
for (i=0; i<=7; i++) {
_root.ground["btn_mc"+i].i = i;
if (i<=7) {
_root.ground["btn_mc"+i].onRelease = function() {
if (num != this.i && !act) {
num = this.i;
fadeOut();
}
};
}
}
}
}
var interval = setInterval(chek, 500);
может можно проще?
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.