- ベストアンサー
クリックでアクティブにしたものに命令したい方法
- クリックしてアクティブになっているインスタンスにのみ命令を与える方法を知りたいです。現在は左右反転のスクリプトを使用していますが、画像下の理想のようにしたいです。
- ステージ上に配置された複数のインスタンスの中からクリックされたものだけに命令を与えたいです。具体的には、丸をクリックした場合には丸だけが左に移動し、星をクリックした場合には星だけが左に移動するような動作を実現したいです。
- flashのas3を使用しており、外部asは使用せずに解決したいです。現在のスクリプトでは左右反転を行っていますが、それを応用してインスタンスごとに異なる動作ができるようにしたいです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
public class 名前 extends (MovieClip か Spriteだったっけかな。。) { var last_click:継承してるクラス名を書く!MovieClip か Sprite; /* コンストラクタ */ function 名前() { last_click=null; /* こいつらそのものをここで接続するほうがいいよ!。 デストラクタで切り離せるから maru 赤い丸のインスタンス名 shikaku 青い四角のインスタンス名 hoshi 黄色の星のインスタンス名 */ /* 以下「命令される」側が接続されている事を前提で */ maru.addEventListener(MouseEvent.CLICK, maru_click); shikaku.addEventListener(MouseEvent.CLICK, shikaku_click); hoshi.addEventListener(MouseEvent.CLICK, hoshi_click); /* 以下「命令する」側が接続されている事を前提で */ resize_btn.addEventListener(MouseEvent.CLICK, resize_btn_click); /* 拡縮ボタン */ flip_btn.addEventListener(MouseEvent.CLICK, flip_btn_click); /* 反転ボタン */ move_btn.addEventListener(MouseEvent.CLICK, move_btn_click); /* 移動ボタン */ } /* 「命令される」側パーツからのリスナー呼び出し */ function maru_click(event:MouseEvent):void{ last_click=maru; } function shikaku_click(event:MouseEvent):void{ last_click=shikaku; } function hoshi_click(event:MouseEvent):void{ last_click=hoshi; } /* 「命令する」側パーツからのリスナー呼び出し */ function resize_btn_click(event:MouseEvent):void{ /* 拡縮ボタン */ if (last_click) { last_click.scaleX *= -1.0; } } function flip_btn_click(event:MouseEvent):void{ /* 反転ボタン */ if (last_click) { last_click.反転わからん! } } function move_btn_click(event:MouseEvent):void{ /* 移動ボタン */ if (last_click) { last_click.positionなのかな・・・メンバーわからん!-=10; } } /* 後は、 * resize_btn * flip_btn * move_btn * をたくさん作って、「拡大」と「縮小」を分けたり。 * 「上」、「下」、「左」、「右」ボタンを増やしたりすればOK * だけど。。ぶっちゃけね!Mouseリスナーでやったほうが楽だよ! * マウスクリック+移動でパーツ移動とか。 */ } 大雑把こんなかんじ。 ただし、すでにAS3のコンパイラ持ってないので あちこち書き換えが必要なのと、パーツに使える 移動だとか、リサイズだとかの、パラメタすでに覚えてないから そこは、マニュアル見て、やってちょ! そういうことなので、コンパイルテストはしてないけど、 概念としては、こんな感じで、いけるよ。
その他の回答 (1)
- AsarKingChang
- ベストアンサー率46% (3467/7474)
もうFlashなので、化石化してる言語で、私もしばらく触ってないのですが。 要するに、 function sayuumaru(event:MouseEvent):void{ maru.scaleX *= -1.0; ← これをとっておけばいいんじゃないの? } // function any_select(event:MouseEvent):void{ last_click=maru; ←このボタンに対応するクラスを覚えておかせる。 } function any_buttom(event:MouseEvent):void{ if (last_click) { last_click.scaleX *= -1.0; ←最後に押したボタンに対して、処理を行えばOK } } いきなり「ボタン」を押せば値は入っていない (一度も選択していないケースを考慮)ので、値チェックをした後、 実際に行いたい処理を書けば解決するんじゃないかと。 後、しばらく触ってないので、忘れましたが。。 ボタンが多いときこれやると、重くなる(リスナーだらけになるため)ので、 リスナーを1回だけにして、リスナー関数内で、 どれが押されたのかを判定させるほうが、早かったですよ。 だいぶ前の言語なので、さすがに覚えてないですがね。
お礼
早速の回答ありがとうございます。 はい化石コンテンツなのです; なので本当に完全終了する前に知りたいことは知っておきたいと思い、フライングで質問しました。 それと初めに私の技量を申し上げずすみませんでした。 フラッシュのアクションスクリプトに触って一か月そこそこの初心者です。 フラッシュ自体は数年前に持っていましたが、その頃は絵を描くだけで満足していました。 まさかフラッシュが終了するなんて思いもしなかったので、全盛期のころに学ばず、スクリプトは後回しにしてきました。 ものを回転させたり、リンケージで呼び出して表示させたりヴィズィブルで隠したり、その程度の練習程度しかできていない状態です。 新しいクラス設定(基本クラスに外部asファイルで追加?)なども講座で見たことがありますが、まだまだ難解です。 そこで今回教えて頂いた方法は、フラッシュのアクションスクリプトで理解しようとするとまだまだ理解ができない状態です。 具体的にどう分からないかと言いますと、 >maru.scaleX *= -1.0; これをとっておく というのはmaru.scaleX *= -1.0;をとっておいて、どういかしたらいいのでしょうか。具体的にどう活用したらよいのか分からないでいます。 あと >function any_select これはどういうvarの設定になるのでしょうか。 >last_click=maru; ←このボタンに対応するクラスを覚えておかせる。 last_click、any_buttomに設定する方法が分からないでいます。 フラッシュを関係なくすると、回答くださった方法は言葉としてはなるほどと理解ができます。「最後にクリックしたものに、命令を下す、という新クラスを設定する」ということだと思います。 具体的にここがこうわからないと上に書きましたが、熟練した方がみると、私の補足質問は何を言っているのかわからない補足だと思います;すみません。 今から各初心者講座を見て回って回答い下さったことを理解しに行こうと思いますが、もし、お時間ありましたが、再び回答くださると助かります。
お礼
再びの回答本当に助かります。 有難うございます。 具体的な書き方も書いて下さり、外部asファイルの使い方さえ理解できれば、すぐにでも出来そうで感謝です。 (外部用のカスタムクラスというものでいいんですよね…?) 数時間、他サイトで外部asのやり方と格闘しましたが、まだまだどこにどれを入力したらいいのか、そこから勉強中です。 答えを頂けるかどうかわからない昔のソフトに本当に回答くださり助かります。しかも、フラッシュがない中おつきあいくださり本当にありがとうございました。 数日、数週間たっても分からない場合はまた質問するかもしれませんが、また、その時はどうぞよろしくお願いします。その時はもっと要点を絞ります。 外部の理解に数日以上はかかると思いますので、取り急ぎお礼だけ失礼しました。 今から外部のことをがんばってみます。