- 締切済み
写真をクリックするとコピー
カテゴリから写真をクリックすると写真がコピーされるにはどのようにすればいいのですか? var mcl:MovieClipLoader = new MovieClipLoader(); for(var i=1;i<=n;i++) { _root.category.createEmptyMovieClip("photo"+i+"_mc",i); array[i] = eval("photo"+i+"_mc"); mcl.loadClip("photo/"+i+".png", array[i]); } } このようなプログラムなのですが写真も読み込めません。 またクリックしたときの書き方もよくわかりません。 よろしくお願いします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- BlurFiltan
- ベストアンサー率91% (1611/1754)
書かれていらっしゃるスクリプトですが。 変数 n の初期値がない。 for文のnが全角になっている。 配列 array が作成されていない。 eval("photo"+i+"_mc"); が間違っている↓。 (もしくは _root.category.createEmpty… が間違い) …などなどなど… 書ききれません。 これでは正常に動作するはずがありません。 n個の PNG をロードする前に1つはロードできたのでしょうか? 1つずつ潰していかないと絶対解決しません。 この回答では一応1つの形を示しますが, 今のままの作り方では, おそらく作成しようとされているものの完成は無理だと思います(絶対無理です)。 作成方法を根本的に変えて着実に作成するようにしなければなりません。 また,PNG のロードは, FlashPlayer8 以上用の SWF を作成しないとできませんよ。 書かれていらっしゃるスクリプトは, FlashMX2004(FlashPlayer7)っぽいのですが, バージョンは大丈夫でしょうか? また, 何がしたいのかわかりません。 コピーと書かれましてもどこにどのようにコピーするのかなどがわかりません。 したがって以下は適当に作成してみたものです。 まず, ファイル構造は次のようになっている必要があります。 (HTMLは省かせていただきます。) 任意のフォルダ ├ ○○.swf └ photo(フォルダ) ├ 1.png ├ 2.png ├ 3.png … … … └ n.png また,○○.swf (○○.fla) のステージ上には, 「category」 というインスタンス名のムービークリップ(MC) が必要です。 _root └ category(ムービークリップ) ※このスクリプトでは, 勝手に「category」の基準点(ムービークリップの「+」印) は, ステージの左上のコーナー (0, 0) にあることになっています。 ※このスクリプトでは,勝手に 外部PNG の大きさを 高さ50px,横幅100px くらいと想定しています。 ※このスクリプトでは,勝手に 外部PNG が, 10個(1.png~10.png)あると想定しています。 _root のフレームに書くスクリプト。 ======================================= // 変数 n の設定 (1.png~10.png がある場合) var n:Number = 10; // 配列 array の作成 var array:Array = new Array(); // 複製(擬似複製)するMCの深度 var num:Number = n; // MovieClipLoaderクラスのインスタンス mcl 作成 var mcl:MovieClipLoader = new MovieClipLoader(); // ロード監視用インスタンス lst を作成 var lst:Object = new Object(); // 外部 png ロード完了時の処理 lst.onLoadInit = function(target:MovieClip):Void { // ロードされた MC クリック時の動作 target.onRelease = function() { num++; // _root に photo○_mc を作成 _root.createEmptyMovieClip("photo"+num+"_mc", num); // 適当な座標指定(実際はどうするのか私が知る所ではない) _root["photo"+num+"_mc"]._x = this._x+200; _root["photo"+num+"_mc"]._y = this._y; // 配列 array から自分自身を捜す for (i=0; i<=n; i++) { // もし自分自身があったら if (array[i] == this) { // その配列要素番号に対応した png をロード _root["photo"+num+"_mc"].loadMovie("photo/"+i+".png"); break; } } }; }; // mclのリスナーとして lst を登録 mcl.addListener(lst); for (var i:Number = 1; i<=n; i++) { _root.category.createEmptyMovieClip("photo"+i+"_mc", i); // eval を使う理由など私が知る所ではない array[i] = eval("category.photo"+i+"_mc"); // 適当に縦に並べる(実際はどうするのか私が知る所ではない) array[i]._y = (i-1)*50; // photoフォルダ の 1~n.png をロード mcl.loadClip("photo/"+i+".png", array[i]); } ======================================= ムービークリップを複製しても, 中にロードされたものまで複製されません。 したがって, クリックしたときに,新しくムービークリップを作成して, そのムービークリップにクリックしたムービークリップと同じPNGをロードするようにしています。 最初にも書きましたが,何がしたいのかわかりません。 したがって上のものは勝手に作成してみたものです。 全て勝手なのでうまく動作したとしても,思ったものとは違うものだと思います。 また, 変えるのも難しい(おそらく不可能)と思いますが, 1つの形を "一応" 回答してみました(つまりさじ投げている状態です)。 とにかく1つ1つ問題点を確実に潰していかないと, 決して思うようなものは作成できません。
お礼
勉強不足のため説明があいまいですみませんでした。 変数の宣言は自分でしていましたがペーストしておらず 迷惑をかけすみませんでした。 もう一度勉強しなおします。その時はご指導のほどよろしくお願いします。 また、プログラムと説明ありがとうございました。