0

最近我在 AS2 中关注并制作了 3d 轮播,但我希望在 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:访问未定义的属性委托。场景 1,图层“图层 1”,第 1 帧,第 6 行 1119:通过静态类型 Class 的引用访问可能未定义的属性宽度。场景 1,图层“图层 1”,第 1 帧,第 7 行 1119:通过静态类型类的引用访问可能未定义的属性高度。

我对 AS2 和 AS3 很陌生,但经过一些研究后,我了解到import mx.utils.Delegate;AS3 中不再需要它,因为它已经有委托并且它们已经内置在代码中,所以我删除了第 1 行和第 41 行的委托和有两个错误:

场景 1,图层“图层 1”,第 1 帧,第 6 行 1119:通过静态类型 Class 的引用访问可能未定义的属性宽度。场景 1,图层“图层 1”,第 1 帧,第 7 行 1119:通过静态类型类的引用访问可能未定义的属性高度。

现在我不知道该怎么做,有人可以帮我将此代码从 AS2 转换为 AS3 吗?

4

1 回答 1

1

你有很多事情要在这里解决:

您的鼠标事件需要更改为 as3 调用 t.icon.onRollOver = over,在 as3 中看起来更像t.icon.addEventListener(MouseEvent.ROLL_OVER, over);

as3 中不再使用attachMovie 。您需要为动作脚本导出要从库中获取的具有唯一类名的电影,然后使用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

于 2011-02-13T18:02:21.053 回答