Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Код AS2 заработает на AS3? Почти (http://www.flasher.ru/forum/showthread.php?t=132315)

almasvas 09.11.2009 18:52

Код AS2 заработает на AS3? Почти
 
Есть проблема: сейчас в интернете большинство красивостей и возможностей написаны в AS3. Но что делать если основной код который уже есть, написан на AS2, а на изучение AS3 времени пока нет.

Вот код на AS2, он не работает на AS3 (а очень надо чтобы работал), - все действия с MovieClip видимо не поддерживаются и просто бесконечно выполняются. Если Вы хорошо знаете AS3, подскажите, какие методы и действия над мувиклипами нужно поменять чтобы этот AS2 заработал как AS3.

Код AS1/AS2:

        //Создаем функцию которая будет красиво менять масштаб кнопки при наводе на нее мышкой..
        MovieClip.prototype.elasticScale = function(a, b, txscale, tyscale) {
    this.tempxscale = this._xscale;
    this.tempyscale = this._yscale;
    this._xscale = a*(this._xscale-txscale)+b*(this.prevXscale-txscale)+txscale;
    this._yscale = a*(this._yscale-tyscale)+b*(this.prevYscale-tyscale)+tyscale;
    this.prevXscale = this.tempxscale;
    this.prevYscale = this.tempyscale;
};
 
 
//Вот действия выполняемые при наводе курсора на кнопку меню menu1
_root.menu1.onRollOver = function() {
    //переходим на кадр, где кнопочка подсвечивается
    _root.menu1.gotoAndPlay(2);
    //а вот колебание кнопки
    _root.menu1.icon1.onEnterFrame = function() {
        this.elasticScale(1.5, -0.7, 110, 110);
    };
 
 
    //тут выезжает красивая фигня-подсказка к кнопке menu1
    _root.submenu1.gotoAndPlay(2);
    //а тут закрываются предыдущие открытые до этого подсказки к другим кнопкам
    _root.submenu2.gotoAndStop(1);
    _root.submenu3.gotoAndStop(1);
        _root.submenu4.gotoAndStop(1);
    _root.submenu5.gotoAndStop(1);
};
//Убираем курсор с кнопки
_root.menu1.onRollOut = function() {
    //возвращаемся в первый кадр подсветки кнопки
    _root.menu1.gotoAndPlay(1);
    //возвращаем масштаб кнопки в исходное положение
    _root.menu1.icon1.onEnterFrame = function() {
        this.elasticScale(1.5, -0.7, 100, 100);
    };
 
};

Это только кусок кода, остальной код к кнопке menu2 menu3 и т.д. подобный.

Помогите пожалуйста, объясните как угодить AS3

DarkLight 09.11.2009 18:55

для клипа, экземплярами котрого являются menu1,menu2,... задаем класс, в этом классе объявляем приватные tempxscale,tempyscale,... , и метод elasticScale
Изменения названий свойств можно найти в разделе про миграцию с AS2 на AS3 в хелпе, в основном убраны "_".

GentleFLASH 09.11.2009 20:15

Вариант не в стиле AS3 конечно, просто раз уж проект AS2, то думаю подойдет в самый раз.


Код AS3:

var __root:Object = this["root"];
var isMouseOver__menu1:Boolean = false;
 
 
 
__root.menu1.icon1.addEventListener( Event.ENTER_FRAME, onEnterFrame__menu1_icon1 );
 
__root.menu1.addEventListener( MouseEvent.MOUSE_OVER, onMouseOver__menu1 );
__root.menu1.addEventListener( MouseEvent.MOUSE_OUT, onMouseOut__menu1 );
 
 
 
 
//Вот действия выполняемые при наводе курсора на кнопку меню menu1
function onMouseOver__menu1( e:MouseEvent ):void
{
        //переходим на кадр, где кнопочка подсвечивается
        __root.menu1.gotoAndPlay(2);
        //а вот колебание кнопки
        isMouseOver__menu1 = true;
 
        //тут выезжает красивая фигня-подсказка к кнопке menu1
        __root.submenu1.gotoAndPlay(2);
        //а тут закрываются предыдущие открытые до этого подсказки к другим кнопкам
        __root.submenu2.gotoAndStop(1);
        __root.submenu3.gotoAndStop(1);
        __root.submenu4.gotoAndStop(1);
        __root.submenu5.gotoAndStop(1);
}
 
//Убираем курсор с кнопки
function onMouseOut__menu1( e:MouseEvent ):void
{
    //возвращаемся в первый кадр подсветки кнопки
    __root.menu1.gotoAndPlay(1);
    //возвращаем масштаб кнопки в исходное положение
        isMouseOver__menu1 = false;
}
 
 
function onEnterFrame__menu1_icon1( e:Event ):void
{
        if( isMouseOver__menu1 )
                elasticScale( __root.menu1.icon1, 1.5, -0.7, 110, 110 );
        else
                elasticScale( __root.menu1.icon1, 1.5, -0.7, 100, 100 );
}
 
 
function elasticScale( in_mc:Object, a:Number, b:Number, tScaleX:Number, tScaleY:Number ):void
{
        tScaleX *= 0.01;
        tScaleY *= 0.01;
 
        in_mc.tempScaleX = in_mc.scaleX;
        in_mc.tempScaleY = in_mc.scaleY;
 
        if( in_mc.prevScaleX && in_mc.prevScaleY )
        {
                in_mc.scaleX = a*(in_mc.scaleX-tScaleX)+b*(in_mc.prevScaleX-tScaleX)+tScaleX;
                in_mc.scaleY = a*(in_mc.scaleY-tScaleY)+b*(in_mc.prevScaleY-tScaleY)+tScaleY;
        }
 
        in_mc.prevScaleX = in_mc.tempScaleX;
        in_mc.prevScaleY = in_mc.tempScaleY;
}


almasvas 10.11.2009 12:08

Оригинальное решение!:victory:
Мне такое в самый раз, но gotoAndPlay и gotoAndStop по прежнему не работают.. Кадры непрерывно проигрываются, и от наведения мыши не зависят.

Вот исходник моей меню на AS2

В таблице миграции с AS2 на AS3 я ниче не понял...

(в AS2) - gotoAndPlay() (в AS3) - flash.display.MovieClip.gotoAndPlay() - This function is no longer a global function, but is still available as a method of the MovieClip class.

GentleFLASH 10.11.2009 12:50

Ну во-первых нужно убрать все скрипты с кнопок и мувиклипов и повесить их в кадр, для перехода по ссылке использовать такое:
Код AS3:

hit.addEventListener( MouseEvent.CLICK, onClick );
 
function onClick( e:*=null ):void
{
        navigateToURL( new URLRequest("http://www.getfile.co.kr"), "_blank" );
}

А остальное в первом кадре исправить по образу и подобию, что я написал в посте выше, т.е все onEnterFrame и onRollOver и т.д сделать через слушатели и отдельные функции.


gotoAndPlay() как был в АС2 так и в АС3 остался кстати, ничего там менять не надо


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

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