PDA

Просмотр полной версии : LoadMovie()


BM Senya
23.04.2007, 18:25
Привет!
нажимаю кнопку
загружается swf (клип)
что нужно сделать, чтоб при повторном нажатии кнопки,
swf (клип) не загружался по новой?
заранее благодарю.

iNils
23.04.2007, 18:31
Варианты:
1. Не нажимать кнопку.
2. Задизаблить кнопку.
3. Сменить код на кнопке.
4. После нажатия всегда проверять значение флага, а при первом нажатии сменить его значение флага.

Skoder
23.04.2007, 18:35
удалить событие onRelease

btn.onRelease = function () {
loadMovie("movie.swf");
delete this.onRelease;
}

BM Senya
23.04.2007, 18:49
Варианты:
1. Не нажимать кнопку.
2. Задизаблить кнопку.
3. Сменить код на кнопке.
4. После нажатия всегда проверять значение флага, а при первом нажатии сменить его значение флага.

Интересно, вы первым часто пользуетесь или только советуете начинающим?

Вот про 3-й поподробнее, если можно.

iNils
23.04.2007, 19:11
Интересно, вы первым часто пользуетесь или только советуете начинающим?Каждый раз когда я не жму кнопку, пользуюсь этим вариантом :D
Вот про 3-й поподробнее, если можно.
function a () {
trace ("a");
this.onRelease = b;
}
function b () {
trace ("b");
}
mc.onRelease = a;

Kikasso
23.04.2007, 19:50
По варианту 1 - можно убрать кнопку с глаз подальше или сделать ее невидимой, так что нажать ее будет проблематично. Впрочем это может не спасти от <TAB> <ENTER>.
"Задизаблить", вариант 2, означает:
function a(){
trace("pressed");
this.enabled = this.useHandCursor = false;
}
btn.onRelease = a;

iNils
23.04.2007, 19:59
Впрочем это может не спасти от <TAB> <ENTER>.
А какже tabEnabled = false?

Kikasso
23.04.2007, 20:14
А какже tabEnabled = false?
Если также и это, то спасет точно.
Но мговенно изчезающие кнопки мне лично не импонируют, а плавно убирающиеся - вполне себе. Только их предварительно надо по методу 2 обработать.

iNils
23.04.2007, 20:18
Если также и это, то спасет точно.
Но мговенно изчезающие кнопки мне лично не импонируют, а плавно убирающиеся - вполне себе. Только их предварительно надо по методу 2 обработать.В интерфейсах мне больше нравятся мгновенные исчезновения.

BM Senya
24.04.2007, 12:21
Да нет, проблема вот в чём. У меня разделы на сайте:
нажал на один из них- загрузился swf (кнопка не должна исчезать), но чтоб если по какимто причинам её нажмут заново, клип не загружался по новой
нажал на другой - вместо предыдущего загрузился новый и тд.

iNils
24.04.2007, 14:48
Тогда лучше всего сделать enabled = false; и что нить с ее цветом, чтобы было видно, что она не активна.

BM Senya
24.04.2007, 15:44
Блин, ну с enabled = false; она остаётся на всегда не активной
а мене надо чтоб перешёл на другой раздел и она снова стала активной
вообщем на кнопке у меня таков код:
serv.onRelease=function(){
loadMovie ("services.swf", "p1");
this.enabled=false;

}
если не трудно поможи!

короче нужно чтоб она была не активна пока юзер не нажмёт любую другую кнопку.

iNils
24.04.2007, 16:13
//// рисуем интерфейс, так как мне лень fla выкладывать
function drawRect (mc:MovieClip, x:Number, y:Number, w:Number, h:Number) {
mc._x = x;
mc._y = y;
mc.beginFill (0x9900FF);
mc.moveTo (0, 0);
mc.lineTo (w, 0);
mc.lineTo (w, h);
mc.lineTo (0, h);
mc.lineTo (0, 0);
mc.endFill ();
}
var mc1:MovieClip = this.createEmptyMovieClip ("mc1", 1);
var mc2:MovieClip = this.createEmptyMovieClip ("mc2", 2);
var mc3:MovieClip = this.createEmptyMovieClip ("mc3", 3);
drawRect (mc1, 20, 20, 100, 20);
drawRect (mc2, 140, 20, 100, 20);
drawRect (mc3, 260, 20, 100, 20);
//// теперь сам код
var oldMC:MovieClip = null;
function onMcRelease () {
trace (this);
this._alpha = 50;
delete this.onRelease;
if (oldMC) {
oldMC._alpha = 100;
oldMC.onRelease = onMcRelease;
}
oldMC = this;
}
mc1.onRelease = onMcRelease;
mc2.onRelease = onMcRelease;
mc3.onRelease = onMcRelease;

Kikasso
24.04.2007, 16:24
//// интерфейс (c)iNils
function drawRect(mc:MovieClip, x:Number, y:Number, w:Number, h:Number) {
mc._x = x;
mc._y = y;
mc.beginFill(0x9900FF);
mc.moveTo(0, 0);
mc.lineTo(w, 0);
mc.lineTo(w, h);
mc.lineTo(0, h);
mc.lineTo(0, 0);
mc.endFill();
}
var mc1:MovieClip = this.createEmptyMovieClip("mc1", 1);
var mc2:MovieClip = this.createEmptyMovieClip("mc2", 2);
var mc3:MovieClip = this.createEmptyMovieClip("mc3", 3);
drawRect(mc1, 20, 20, 100, 20);
drawRect(mc2, 140, 20, 100, 20);
drawRect(mc3, 260, 20, 100, 20);

/// функция для включения-выключения
function enabledManager(prop, oldval, newval) {
if (oldval == newval) {
return oldval;
}
if (oldval) {
oldval.enabled = oldval.useHandCursor=true;
oldval._alpha = 100;
}
if (newval) {
newval.enabled = newval.useHandCursor=false;
newval._alpha = 50;
}
return newval;
}
var pressed:MovieClip = null;
this.watch("pressed", enabledManager);
//// теперь сам код
function onMcRelease() {
trace(this);
pressed = this;
}
mc1.onRelease = mc2.onRelease=mc3.onRelease=onMcRelease;

upd: строка var oldMC:MovieClip = null осталась от копипаста и в этом коде не нужна, хотя ошибки не сгенерит. Я ее убрал.

BM Senya
24.04.2007, 17:32
Вставляю var oldMC:MovieClip = null;
function onMcRelease() {
loadMovie ("services.swf", "p1");
pressed = this;
}

И тож самое, нажимаю кнопку и клип по новой грузится (а кнопка само сабой остаётся активной) не могу разобратться.


Вот исходник: http://www.sendspace.com/file/5ec83b

Kikasso
24.04.2007, 19:25
У меня стоит волшебное слово watch(), которое следит за этим свойством и вызывает мою функцию enabledManager при попытке присвоить ему новое значение. Почитайте в хелпе об этом "watch".
У iNils'а по-другому. Присмотритесь, разница есть - но функционально и внешне никакой.

ЗЫ> пост свой обновил..

BM Senya
24.04.2007, 20:13
Загляните в мой исходник он весит 500 кб

Kikasso
24.04.2007, 21:51
Ну и что я там вижу? serv.onRelease=function(){
loadMovie ("services.swf", "p1");
this.onRelease;

}
cont.onRelease=function(){
loadMovie ("contacts.swf", "p1");
this.onRelease;
}
Что означают выделеные строчки? Нет ощущения нехватки чего-то?
Возьмите код iNils'а, начиная с места где
---------------8<-----------------
//// теперь сам код
...

После или вместо trace() вставьте ваш loadMovie. Имена мувиклипов соответственно скорректируйте.

BM Senya
25.04.2007, 12:21
Так а как для всех шести разделов сделать ссылки (каждому свой loadMovie() )?У меня выходит только для одного?

Kikasso
25.04.2007, 14:54
добавьте в mcOnRelease:
//...
loadMovie( this.fileToLoad );
//...и в конце:
mc1.fileToLoad = "file1.swf";
mc2.fileToLoad = "anotherfile.swf";

BM Senya
25.04.2007, 15:27
Я вот так сделал, ошыбку выбивает!!! Неправилно?
var OldMc:MovieClip;
function onMcRelease () {
loadMovie(this.fileToLoad);
mc1.fileToLoad = "services.swf";
mc2.fileToLoad = "contacts.swf";
this._alpha = 50;
delete this.onRelease;
if (OldMc) {
OldMc._alpha = 100;
OldMc.onRelease = onMcRelease;

}
OldMc = this;
}

mc1.onRelease = onMcRelease;
mc2.onRelease = onMcRelease;
mc3.onRelease = onMcRelease;
mc4.onRelease = onMcRelease;
mc5.onRelease = onMcRelease;
mc6.onRelease = onMcRelease;

Kikasso
25.04.2007, 15:35
Голову пора включать.
mc1.onRelease = onMcRelease;
mc1.fileToLoad = "services.swf";
В конце, т.е. вне функции.

BM Senya
25.04.2007, 15:39
Всё равно ошибка
вто чё пишет
**Error** Scene=Scene 1, layer=Layer 18, frame=1:Line 3: Wrong number of parameters; loadMovie requires between 2 and 3.
loadMovie (this.fileToLoad);

Total ActionScript Errors: 1 Reported Errors: 1

Kikasso
25.04.2007, 15:58
loadMovie (this.fileToLoad, "p1");
Самому можно было догадаться.

BM Senya
25.04.2007, 16:25
благодарю за помощь!!!