最近我跟随并在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:通过具有静态类型Class的引用访问可能未定义的属性高度。
我对AS2和AS3很新,但经过一些研究后我明白在AS3中不再需要import mx.utils.Delegate;
,因为它已经有了委托,它们已经内置在代码中所以我删除了委托这是第1行和第41行,有两个错误:
场景1,层'第1层',第1帧,第6行1119:通过具有静态类型Class的引用访问可能未定义的属性宽度。 场景1,层'层1',帧1,线7 1119:通过具有静态类型Class的引用访问可能未定义的属性高度。
现在我无法弄清楚该做什么,有人可以帮助我将此代码从AS2转换为AS3吗?
答案 0 :(得分:1)
这里有很多事情需要解决:
您的鼠标事件需要更改为as3调用 t.icon.onRollOver = over ,as3看起来更像 t.icon.addEventListener(MouseEvent.ROLL_OVER,over);
as3中不再使用attachMovie 。 你需要导出动作脚本你想要从具有唯一类名的库获得的电影,然后使用 new someName(); 来创建它。然后必须使用 addChild
将其添加到显示列表中 在as3中未使用onEnterFrame ,您需要创建一个更像这样的enterframe事件:** addEventListener(Event.ENTER_FRAME,someFunction);
as3中未使用委托。
_x,_y,_parent,_alpha等上的标志已在as3中删除。只需使用x,y,父级,alpha等。
已从as3中删除swapDepths ,您需要使用显示列表添加/删除/交换级别。
听起来你可能需要在as3上稍微研究一下才能正确解决这个问题!尝试查看此链接,以便比较as2和as3功能。
http://www.actionscriptcheatsheet.com/downloads/as3cs_migration.pdf