Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Проблема с кодом (http://www.flasher.ru/forum/showthread.php?t=98511)

Rasamaha 14.07.2007 23:00

Проблема с кодом
 
Господа, я к вам опять в недобрый час. Проблема в следующем. На главной временной линейке есть две кнопки. В первый кадр вбивается код:
Код:

light2._alpha = 0;//Начальное состояние первой кнопки
part._alpha = 55;
light2.onRollOver = function() {
        light2._alpha = 0;
        part._alpha = 55;
        onEnterFrame = function () {
                light2._alpha += 8;
                part._alpha += 4;
        };
};
delete onEnterFrame;
light2.onRollOut = function() {
        light2._alpha = 100;
        part._alpha = 100;
        onEnterFrame = function () {
                light2._alpha -= 8;
                part._alpha -= 4;
                if (part._alpha<=55) {
                        part._alpha = 55;
                }
        };
};
delete onEnterFrame;

(Т.е. при наведении на кнопку она плавно становится непрозрачной, при отведении прозрачной.)
Продолжаем вбивать код для второй кнопки. Теперь все выглядит так:
Код:

light2._alpha = 0;//Начальное состояние первой кнопки
light3._alpha=0;// Начальное состояние второй кнопки
part._alpha = 55;
light2.onRollOver = function() {
        light2._alpha = 0;
        part._alpha = 55;
        onEnterFrame = function () {
                light2._alpha += 8;
                part._alpha += 4;
        };
};
delete onEnterFrame;
light2.onRollOut = function() {
        light2._alpha = 100;
        part._alpha = 100;
        onEnterFrame = function () {
                light2._alpha -= 8;
                part._alpha -= 4;
                if (part._alpha<=55) {
                        part._alpha = 55;
                }
        };
};
delete onEnterFrame;
light3._alpha = 0;
light3.onRollOver = function() {
        light3._alpha = 0;       
        onEnterFrame = function () {
                light3._alpha += 8;               
        };
};
delete onEnterFrame;
light3.onRollOut = function() {
        light3._alpha = 100;       
        onEnterFrame = function () {
                light3._alpha -= 8;               
        };
};
delete onEnterFrame;

Все работает…но! Как только курсор с одной кнопки попадает на другую (ведем курсор по кнопкам), предыдущая застывает (код стопорится). Т.е. при плавном переходе от первой кнопки ко второй первая должна гаснуть, а вторая зажигаться. На деле получается, что первая кнопка застывает, как только достигли второй. Думал проблема в delete onEnterFrame…нифига, так же все.:quiet: Если кто знает проблему - взываю к помощи.

silin 14.07.2007 23:56

проблема в том, что в onRollOver /onRollOut ты назначаешь/меняешь onEnterFrame одного и того же объекта (их родителя), стало быть определенный по onRollOut одной кнопки, тут же переопределяется в onRollOver другой..
поставь везде this.onEnterFrame=.. (тогда это будут onEnterFrame самих кнопок и переопределяться друг другом уже не будут)
зы: delete onEnterFrame (да еще в таком количестве) ничего не выполняют в твоем коде..

D12 15.07.2007 00:14

Код:

var Go:Number = 3;//скорость альфы
var Next:Number = 2;//количество кнопак на которые распространяется код
for (var i:Number = 0; i<Next+1; i++) {
        this["mc"+i]._alpha = 0;
        this["mc"+i].onRollOver = function() {
                this.onEnterFrame = function() {
                        if (this.hitTest(_root._xmouse, _root._ymouse)) {
                                if (this._alpha<=100) {
                                        this._alpha += Go;
                                }
                        }
                        if (!this.hitTest(_root._xmouse, _root._ymouse)) {
                                if (this._alpha>=0) {
                                        this._alpha -= Go;
                                }
                                if (this._alpha<=0) {
                                        delete this.onEnterFrame;
                                }
                        }
                };
        };
}

Держи зайцепку =) должно работать :)

кнопки называть вот так mc1 , mc2 и т.д.

udaaff 15.07.2007 01:14

в "onEnterFrame" какого мувика ты записываешь функцию?
в _root -- поэтому она у тебя перезаписывается если ты наводишь на дугую кнопку.
пиши в функциях, который записываешь в onRollOut и onRollOver -- this.onEnterFrame. Если cсылаешься не из функции пиши lightX.onEnterFrame

Rasamaha 15.07.2007 03:49

Ok, спасиб всем.:drinks: Сейчас исправимся. Вот что еще хотел спросить…смотрю я на свой код и думаю, *Может его оптимизировать как-нибудь? Что то уж больно громоздкий для такого примитивного действа.:quiet: * Как считаете?

Вот код на одну (первую) кнопку – она вообще работать отказалась.:quiet:
Код:

light2._alpha = 0;
light3._alpha = 0;
part._alpha = 55;
light2.onRollOver = function() {
        light2._alpha = 0;
        part._alpha = 55;
        this.onEnterFrame = function() {
                light2._alpha += 8;
                part._alpha += 4;
        };
};
light2.onRollOut = function() {
        light2._alpha = 100;
        part._alpha = 100;
        this.onEnterFrame = function() {
                light2._alpha -= 8;
                part._alpha -= 4;
                if (part._alpha<=55) {
                        part._alpha = 55;
                }
        };
};


iNils 15.07.2007 04:43

Для оформления своего кода, надо использовать теги [code][/code].
Название темы не раскрывает сути вопроса. У вас уже второй плюс. Читайте правила.

Kikasso 15.07.2007 05:25

Код:

stop();
var fadeSpeed = 5;
var limAlpha = 55;
function fadeIn(){
 this._alpha += fadeSpeed;
 if(this._alpha >= 100 ) delete this.onEnterFrame;
}
function fadeOut(){
 this._alpha -= fadeSpeed;
 if(this._alpha <= limAlpha ){
  this._alpha = limAlpha;
  delete this.onEnterFrame;
 }
}
function doRollOver(){
 this.onEnterFrame = fadeIn;
}
function doRollOut(){
 this.onEnterFrame = fadeOut;
}
/// код для кнопки ///
mc._alpha = limAlpha;
mc.onRollOver = doRollOver;
mc.onRollOut = mc.onDragOut = doRollOut;

upd: конечно код не "на" кнопку, а "для" кнопки.

Rasamaha 15.07.2007 12:17

Цитата:

Сообщение от Kikasso
Код:

/// код на кнопку ///
mc._alpha = limAlpha;
mc.onRollOver = doRollOver;
mc.onRollOut = mc.onDragOut = doRollOut;


Вешаю код на кнопку - выдает ошибку(

etc 15.07.2007 12:32

Надо «вешать» в кадр, а не на кнопку.

silin 15.07.2007 15:20

Цитата:

Может его оптимизировать как-нибудь? Что то уж больно громоздкий для такого примитивного действа
Kikasso вполне его оптимизировал для твоего подхода (через onEnterFrame)
есть и другие варианты:
Код:

import mx.transitions.*
var fadeDuration=20;
var defaultAlpha=55;
function fadeIn(){
        new Tween(this,"_alpha",null,this._alpha,100,fadeDuration);
}
function fadeOut(){
        new Tween(this,"_alpha",null,this._alpha,defaultAlpha,fadeDuration);
}
//mc1, mc2 - кнопки
mc1._alpha=mc2._alpha=defaultAlpha;
mc1.onRollOver = mc2.onRollOver =fadeIn;
mc1.onRollOut = mc2.onRollOut = fadeOut;

еще удобнее положить это добро в класс
Код:

import mx.transitions.*
class But extends MovieClip {
        static public var defaultAlpha=10;
        static public var duration=20;
        public function But(){
                onDragOut = onRollOut;
                _alpha=defaultAlpha;
        }
        function onRollOver(){
                new Tween(this,"_alpha",null,_alpha,100,duration);
        }
        function onRollOut(){
                new Tween(this,"_alpha",null,_alpha,defaultAlpha,duration);
        }
}

и назначить его (в библиотке linkage.. символа) этим кнопкам


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

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