PDA

Просмотр полной версии : Код AS2 заработает на AS3? Почти


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

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


//Создаем функцию которая будет красиво менять масштаб кнопки при наводе на нее мышкой..
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, то думаю подойдет в самый раз.


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 по прежнему не работают.. Кадры непрерывно проигрываются, и от наведения мыши не зависят.

Вот (http://almas-site.narod.ru/source.fla) исходник моей меню на AS2

В таблице миграции (http://livedocs.adobe.com/flex/3/langref/migration.html) с 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
Ну во-первых нужно убрать все скрипты с кнопок и мувиклипов и повесить их в кадр, для перехода по ссылке использовать такое:

hit.addEventListener( MouseEvent.CLICK, onClick );

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

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


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