簡體   English   中英

將ActionScript 2代碼轉換為ActionScript 3

[英]converting Actionscript 2 code into Actionscript 3

最近,我跟隨並在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:Delegate找不到。 場景1,“圖層1”層,第1幀,第1行,1172:定義mx.utils:Delegate找不到。 場景1,“圖層1”層,第1幀,第41行1120:訪問未定義的屬性委托。 場景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嗎?

您在這里有很多事情要解決:

您的鼠標事件需要更改為as3,才能調用t.icon.onRollOver = over ,在as3中看起來更像是t.icon.addEventListener(MouseEvent.ROLL_OVER,over);

在as3中不再使用attachMovie 您需要使用唯一的類名將要從庫中獲取的電影導出為ActionScript ,然后使用new someName();。 創建它。 然后必須使用addChild將其添加到顯示列表中

onEnterFrame在as3中未使用,您需要創建一個如下所示的enterframe事件:** addEventListener(Event.ENTER_FRAME,someFunction);

在as3中未使用委托

_x,_y,_parent,_alpha等上的標志已在as3中刪除。 只需使用x,y,父級,alpha等。

swapDepths已從as3中刪除,您需要使用顯示列表來添加/刪除/交換級別。

聽起來您可能需要仔細研究as3才能正確解決這一問題! 嘗試查看此鏈接,以便在as2和as3功能之間進行比較。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM