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:Delegate が見つかりませんでした。シーン 1、レイヤー 'レイヤー 1'、フレーム 1、ライン 1 1172: 定義 mx.utils:Delegate が見つかりませんでした。シーン 1、レイヤー「レイヤー 1」、フレーム 1、行 41 1120: 未定義のプロパティ Delegate へのアクセス。シーン 1、レイヤー「レイヤー 1」、フレーム 1、ライン 6 1119: 静的タイプのクラスを使用した参照を介して、未定義の可能性のあるプロパティ幅にアクセスします。シーン 1、レイヤー「レイヤー 1」、フレーム 1、ライン 7 1119: 静的タイプのクラスを使用した参照による未定義の可能性のあるプロパティの高さへのアクセス。

私はAS2とAS3を初めて使用しますが、いくつかの調査の結果import mx.utils.Delegate;、AS3にはすでにデリゲートがあり、コードに組み込まれているため、AS3では不要であることがわかりました。そのため、1行目と41行目のデリゲートを削除します。 2つのエラーが発生しました:

シーン 1、レイヤー「レイヤー 1」、フレーム 1、ライン 6 1119: 静的タイプのクラスを使用した参照を介して、未定義の可能性のあるプロパティ幅にアクセスします。シーン 1、レイヤー「レイヤー 1」、フレーム 1、ライン 7 1119: 静的タイプのクラスを使用した参照による未定義の可能性のあるプロパティの高さへのアクセス。

何をすべきか分からないので、誰かがこのコードを AS2 から AS3 に変換するのを手伝ってくれませんか?

4

1 に答える 1

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、親、アルファなどを使用してください。

swapDepthsは as3 から削除されました。レベルを追加/削除/交換するには、表示リストを使用する必要があります。

これに適切に取り組む前に、as3 について少し勉強する必要があるようです。as2 と as3 の機能の比較については、このリンクをチェックしてみてください。

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

于 2011-02-13T18:02:21.053 に答える