ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

質問者:nanachan08 Flashのサンプルにつきまして
困り度:
  • すぐに回答を!
はじめまして、よろしくお願います!

こちらのFlashサンプルサイトにあります。
http://book.mycom.co.jp/support/e5/actionscript10/
4-07 カーソルの軌跡を追いかけて消える2
をActionScript3.0で使用したいのですが、
うまく動いてくれず困っています。。

for (var i = 0; i<8; i++) {
root.attachMovie("shadow", "shadow"+i, i);
}
member = new Array();
this.onEnterFrame = function() {
position = {x:mouseX, y:mouseY};
member.push(position);
if (member.length>8) {
member.shift();
}
for (var i = 0; i<member.length; i++) {
this["shadow"+i].x = member[i].x;
this["shadow"+i].y = member[i].y;
this["shadow"+i].alpha = 100*(i/7);
}
};

下記のようなエラーが出てしまいます。

1151: 定義 i (名前空間 internal) にコンフリクトが存在します。
質問投稿日時:09/07/04 18:21
質問番号:5098032
この質問に対する回答は締め切られました。

回答

良回答20pt

回答者:BlurFiltan ターゲットパスなどが元から微妙に変というのはありますが,
そういう細かいことは無視して(=なるべく元のままで)
エラーを出さないという最低限の修正を加えた ActionScript 3.0 は次のようになります。

----------------------------------------------
for (var i:int = 1; i<8; i++) {
root["shadow"+i] = new shadow();
MovieClip(root).addChild(root["shadow"+i]);
}

var member:Array = new Array();

var position:Object = new Object();

for (i = 1; i<8; i++) {
position={mX:mouseX,mY:mouseY};
member.push(position);
}

this.addEventListener(Event.ENTER_FRAME,myFunc);

function myFunc(evt:Event):void {
position={mX:mouseX,mY:mouseY};
member.push(position);
if (member.length>8) {
member.shift();
}
for (var i = 1; i<member.length; i++) {
this["shadow"+i].x = member[i].mX;
this["shadow"+i].y=member[i].mY;
this["shadow"+i].alpha = i/7;
}
}
---------------------------------------------

ただ ActionScript 3.0 では,
そもそもスクリプトのみの変更ではなくてそもそものオブジェクトの存在自体が変わっています。
ActionScript 3.0 にパブリッシュ設定した時点で,
自動的に「ライブラリ」にあるシンボル「shadow」の識別子「shadow」が削除されて,
クラス名に「shadow」が付けなおされていた場合はそれで良いですが,
「ライブラリ」にあるシンボル「shadow」の識別子などが自動的に修正されていなければ,
手動で修正する必要があります。
種類:回答
どんな人:経験者
自信:参考意見
回答日時:09/07/05 08:52
回答番号:No.1
この回答へのお礼ご丁寧にありがとうございました!!