преобразование кода ActionScript 2 в ActionScript 3

Недавно я следил за ней и сделал трехмерную карусель в AS2, но я хочу использовать ее и сделать ее в AS3. Есть ли способ преобразовать код, чтобы карусель могла работать в AS3?

Ниже приведен код карусели AS2:

import mx.utils.Delegate;

var numOfItems:Number;
var radiusX:Number = 300;
var radiusY:Number = 75;
var centerX:Number = Stage.width / 2;
var centerY:Number = Stage.height / 2;
var speed:Number = 0.05;
var perspective:Number = 130;
var home:MovieClip = this;

var tooltip:MovieClip = this.attachMovie("tooltip","tooltip",10000);
tooltip._alpha = 0;

var xml:XML = new XML();
xml.ignoreWhite = true;

xml.onLoad = function()
{
   var nodes = this.firstChild.childNodes;
   numOfItems = nodes.length;
   for(var i=0;i<numOfItems;i++)
   {
      var t = home.attachMovie("item","item"+i,i+1);
      t.angle = i * ((Math.PI*2)/numOfItems);
      t.onEnterFrame = mover;
      t.toolText = nodes[i].attributes.tooltip;
      t.icon.inner.loadMovie(nodes[i].attributes.image);
      t.r.inner.loadMovie(nodes[i].attributes.image);
      t.icon.onRollOver = over;
      t.icon.onRollOut = out;
      t.icon.onRelease = released;
   }
}

function over()
{
   home.tooltip.tipText.text = this._parent.toolText;
   home.tooltip._x = this._parent._x;
   home.tooltip._y = this._parent._y - this._parent._height/2;
   home.tooltip.onEnterFrame = Delegate.create(this,moveTip);
   home.tooltip._alpha = 100;
}

function out()
{
   delete home.tooltip.onEnterFrame;
   home.tooltip._alpha = 0;
}

function released()
{
   trace(this._parent.toolText);
}

function moveTip()
{
   home.tooltip._x = this._parent._x;
   home.tooltip._y = this._parent._y - this._parent._height/2;
}

xml.load("icons.xml");

function mover()
{
   this._x = Math.cos(this.angle) * radiusX + centerX;
   this._y = Math.sin(this.angle) * radiusY + centerY;
   var s = (this._y - perspective) /(centerY+radiusY-perspective);
   this._xscale = this._yscale = s*100;
   this.angle += this._parent.speed;
   this.swapDepths(Math.round(this._xscale) + 100);
}

this.onMouseMove = function()
{
   speed = (this._xmouse-centerX)/2500;
}

Когда я добавляю этот код в AS3, я получаю следующую ошибку:

Сцена 1, слой «Уровень 1», кадр 1, строка 1 1172: Определение mx.utils: Не удалось найти делегата. Сцена 1, слой «Уровень 1», кадр 1, строка 1 1172: Определение mx.utils: Не удалось найти делегата. Сцена 1, слой «Уровень 1», кадр 1, строка 41 1120: Доступ к неопределенному свойству Delegate. Сцена 1, слой «Уровень 1», кадр 1, строка 6 1119: Доступ к возможно неопределенной ширине свойства через ссылку со статическим типом Class. Сцена 1, слой «Уровень 1», кадр 1, строка 7 1119: Доступ к возможно неопределенной высоте свойства через ссылку со статическим типом Class.

Я новичок в AS2 и AS3, но после некоторого исследования я понимаю, что import mx.utils.Delegate; больше не нужен в AS3, поскольку он уже имеет делегат, и они уже встроены в код, поэтому я удаляю делегат, который является строкой 1 и строкой 41. и получил две ошибки:

Сцена 1, слой «Уровень 1», кадр 1, строка 6 1119: Доступ к возможно неопределенной ширине свойства через ссылку со статическим типом Class. Сцена 1, слой «Уровень 1», кадр 1, строка 7 1119: Доступ к возможно неопределенной высоте свойства через ссылку со статическим типом Class.

Теперь я не могу понять, что делать, может кто-нибудь помочь мне преобразовать этот код из AS2 в AS3?


person shkz    schedule 13.02.2011    source источник
comment
Можете ли вы загрузить свой файл fla и xml?   -  person Taurayi    schedule 13.02.2011


Ответы (1)


Здесь у вас есть несколько вопросов:

События мыши необходимо изменить на вызовы as3 t.icon.onRollOver = over, в as3 больше похоже на t.icon.addEventListener (MouseEvent.ROLL_OVER, over);

attachMovie больше не используется в as3. вам нужно экспортировать для ActionScript фильм, который вы хотите получить из библиотеки, с уникальным именем класса, а затем использовать new someName (); для его создания. Затем его необходимо добавить в список отображения с помощью addChild.

onEnterFrame не используется в as3, вам нужно создать событие enterframe, более похожее на это: ** addEventListener (Event.ENTER_FRAME, someFunction);

делегат не используется в as3.

флаги _x, _y, _parent, _alpha и т. д. были удалены в as3. просто используйте x, y, parent, alpha и т. д.

swapDepths был удален из as3. Вам необходимо использовать список отображения, чтобы добавлять / удалять / менять уровни.

звучит так, как будто вам, возможно, придется немного изучить as3, прежде чем вы сможете правильно взяться за это! попробуйте проверить эту ссылку для сравнения функций as2 и as3.

http://www.actionscriptcheatsheet.com/downloads/as3cs_migration.pdf

person Ribs    schedule 13.02.2011
comment
спасибо за информацию, но я действительно новичок в AS, я попытался преобразовать его, заменив каждое действие, но я могу его найти, в списке миграции действия, которые были удалены в AS3, не имеют замены, поэтому я не знаю, что делать - person shkz; 15.02.2011
comment
У меня где-то есть карусель as3. Надо выкопать и выложу. Постараюсь найти его сегодня. - person Ribs; 15.02.2011