[return]の役割について

このQ&Aのポイント
  • ActionScript 3.0のバージョンでの[return]の役割について質問しています。
  • 質問者は、参考書籍で[returnは関数内の値を戻します]とされているが、具体的な理解ができていないと述べています。
  • 例示されたコードでは、イベントディスパッチャーを介して[mover]関数の値を返しているが、[return]の真価がわからないという状況です。
回答を見る
  • ベストアンサー

[return]の役割について

バージョン : ActionScript 3.0 よく参考書籍等では、[returnは関数内の値を戻します]とありますが… stage.addEventListener(MouseEvent.MOUSE_OVER , buttonTrue); function buttonTrue(e :MouseEvent) :void {  e.target.buttonMode = true; } 例えば上記の処理は、イベントディスパッチャーを介して[mover]関数の値を返していると思うのですが…? まったく[return]の真価がわかりません…初歩的な質問で申し訳ありませんが、何方か教えて頂けませんでしょうか?

  • Flash
  • 回答数2
  • ありがとう数5

質問者が選んだベストアンサー

  • ベストアンサー
  • DPE
  • ベストアンサー率85% (666/776)
回答No.2

英語の” return ”には、「返す」という他に「元の場所に戻る」「戻す」といった意味もあります。 プログラミングの本では ActionScript に限らず、return 文は往々にして「値を返す」と説明されていますが、英語の return と同様に、「値を返す」だけでなく「元に戻る」という機能もあります。 コンピュータのプログラムは、たくさんの命令がメモリの中に格納されていて、命令は並んでいる順番に実行されていきます。 関数は関連する複数の命令をひとかたまりにしたもので、やはりメモリ内に格納されますが、メインのプログラムとは別の場所に分けて格納されます。 関数を呼び出すと、もとのプログラムの流れから一旦外れ、関数が格納されているところから順番に命令を読み取り、実行されるようになります。 そして、関数が終了した時には、再びもとのプログラムの流れに「戻る」のです。 関数は本流から一旦離れて支流に寄り道するようなものですから、用が済んだら本流に戻らなければなりません。 return 文を入れると、その場で呼び出し元である本流の方に戻ります。 この機能を利用して、関数を最後まで実行しなくてもいい場合に、return 文により関数の処理を任意の箇所で打ち切ることができます。 例えば、引数で指定したものを探し出して加工する、という関数があるとしましょう。 探すものが見付かったのなら関数内で次の加工処理に取りかかるのですが、なかった場合はやることがありません。 この例では、探しものが見当たらないと分かった時点で、return 文により関数を打ち切ることができます。 これは無駄な処理をせずに済むばかりでなく、問題のある引数が渡されてきた時、そのまま処理を続けると困るので関数を中断させたい場合などにも使える方法です。 関数の冒頭で引数をチェックし、何か問題があると分かったら、その時点で return 文で戻ってしまえば、問題含みのまま処理を続けて重大な障害や深刻なバグに進展するようなこともなくなります。 *********************************** 関数から呼び出し元に戻る際に、何かの値を1つだけ持ち帰ることができます。 これが解説書でもしばしば説明されている、return 文の「値を返す」機能です。 関数から持って帰ってくる値を「戻り値」といいます。 ActionScript の文法では、function 文の終わり(最後の” } ”)までが関数と見なされ、return 文がなくても関数が終了して自動的にもとのスクリプトの流れに戻っていきます。 関数の終端に達して自動的に戻った場合、関数から持ち帰る値は何もありません。 return 文を使って戻ると、何かの値を持ち帰ることができます。 もちろん、持ち帰りたい値がなければ、return 文を使っていても何も持たずに戻ることもできます。 先述のように関数の途中で return 文で戻る場合でも、値を持ち帰ることができます。 先の例でいうと、引数で指示されたものを探索した結果、  ・探しものが見付からない時は、加工処理に移らず、-1 を持って帰る( return で -1 を返す)  ・探しものはあったが加工に失敗した場合は、加工処理を途中で打ち切り、0 を持って帰る( return で 0 を返す)  ・探しものが見付かり、加工処理も無事に終了したら、成功の証として 1 を持って帰る( return で 1 を返す) ・・・というに設計したとします。 すると、関数からの戻り値を見ることで、処理が正常に行われたのか、それとも失敗して打ち切られたのか、失敗したのなら原因は何かを判断できるようになります。 また、失敗した時には return 文により途中で処理が打ち切られるのですから、余計な処理を続けたり、問題があって危険な状態のまま突っ走ってしまうようなこともなくなります。 なお、return 文で持っていける値は”1つだけ”です。 複数の値を持ち帰りたい時は、Object 型の変数にまとめるなどの工夫が必要です。 *********************************** ところで、ActionScript 1.0 や 2.0 でよく見かける  ○○.onRelease = function() ・・・ というような書き方があります。 ” function ”とあるからには関数を定義しているわけですが、この関数の中に return 文、特に、値を返す目的での return 文はあまり見かけないと思います。 ActionScript 3.0 では名前のある関数を定義し、addEventListener メソッドで登録する形式に変わりましたが、登録する関数の中に return 文はまずないでしょう。 なぜでしょうか? return 文には、「呼び出し元に戻る」「戻る際に値を1つだけ持ち帰る」という、2つの機能がありました。 持ち帰った値は、関数の呼び出し元に受け取る権利があります。 ActionScript は”イベント駆動型”という考え方を採用しています。 これは、ボタンが押される・マウスが操作されるなど、ムービー再生中に起こる様々な出来事(イベント)を監視しているプログラムが、ユーザーの組んだスクリプトとは別に裏方で動いており、イベントが発生した時に予めイベントハンドラに登録されている関数を呼び出してくれる仕組みのことです。 イベントが起きた時に呼び出される関数の呼び出し元は、イベント処理を実際に担当しているプログラムです。 従って、これらの関数からの戻り値を受け取る権利があるのも、このプログラムということになります。 イベント発生時に呼び出される関数を呼び出すのが自分ではないために、ユーザーはその戻り値を受け取ることができません。 つまり、値を返す関数にしたところで返ってきた値を参照できないので、イベントにより呼び出される関数には return 文を入れてもあまり意味がないのです。 自作した関数や ActionScript で用意されている関数・各クラスのメソッドを自分のスクリプトの中で呼び出す時は、呼び出し元は自分になります。 ですから、関数から返ってくる値を好きなように利用することができます。 ----------------------------------------------------------- ActionScript はイベントを利用した処理が多くを占めます。 イベント発生時に呼び出される関数からは戻り値を受け取れないために、作る関数に return 文を入れることが少なく、だから「 return 文はどんな時、何のために使う??」と疑問に思うのではないでしょうか。 何かの仕事をしてその結果を返してくれたり、成功 / 失敗などの状況に応じて返ってくる値や作業の結果が変わる関数やメソッドは全て、return 文を利用しています。 自分ではあまり使う機会がなくても、return 文は見えないところでたくさん活躍しているのです。 イベント処理ではない関数を自作する時にも、上手く使えば安全で堅牢な設計の関数になります。 いろいろな使い方を研究してみてください。

ryo2501
質問者

お礼

早速のご回答、ありがとうございます! 通常、どの入門書籍に載っている内容をここまで事細かく説明して頂き有難う御座います。 ご回答を拝見させて頂いた限りでは、わたしの[return]の認識が間違っていた様で、大変参考になりました。 DPE様の文末でのご指摘どおり、再度勉強し直そうと思う次第であります。 重ねて御礼申し上げます。有難う御座いました!

その他の回答 (1)

  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.1

関数を使うときの使い方の問題です。 例えば ballMC というムービークリップがあったとします。 ballMC.x = Math.random()*500; これで, ballMC の x座標が 0以上500未満 のどこかわからないランダムな場所に移動します。 Mathクラスの random メソッドの戻り値が 0以上1未満のランダムな数(Number) ですから, その 戻り値 に 500 を掛けることによって 0以上500未満 の数を得ているわけです。 つまり, random メソッドの戻り値(returnされる値)が 0以上1未満 の乱数ですからその戻り値を利用しているのです。 関数でも同様です。 何かを return させるとその値を戻り値として利用できますから, そういう使い方をするときに便利です。 ---大まかな例--- 身長(cm)からその平均体重(kg)を求め,その値を return させるという 「身長_体重変換」 という関数を作成したとします。 a = 身長_体重変換(170); これで身長170cmの人の平均体重が a に代入されますから,このように使いたい場合便利ですよね。 また同じ return で, if (身長_体重変換(170) + 20 < 私の体重) { trace("私太りすぎ") } else if (身長_体重変換(170) - 20 > 私の体重) { trace("私痩せすぎ"); } else { trace("私ほどよい体重"); } このように使うことも当然可能です。 return付き関数は,正に "関数"(数学で言う関数/函数) です。 (ある値に対して,ただ1つの値が対応するような関係があるとき,この関係を関数という。) 関数を本来の数学的関数らしく使うときの使い方が return 返す使い方です。 void は戻り値のないプログラム上で発展した形の関数です。 ※数学的とは言っても戻り値は数とは限りません。  オブジェクトを返す場合もあれば配列を返す場合もあります。 例 // 文字列「あいうえお。かきくけこ」を「。」で分割して配列 arr を得る arr = ("あいうえお。かきくけこ").split("。");

関連するQ&A

  • アクションスクリプト3.0での存在している予定のインスタンスの参照方法

    abcというムービークリップにマウスオーバーするとxyz(クラス名はaru)という ムービークリップを表示するプログラム(アクションスクリプト3.0)を作りました。 abc.addEventListener(MouseEvent.MOUSE_OVER , mover); function mover(e:MouseEvent):void{ var xyz:aru = new aru(); xyz.x = 380; xyz.y = 100; addChild(xyz); } ここまでは問題なく機能しました。 ここで、abcのマウスオーバーがなくなった状態(つまりマウスアウト) になったら、xyzを非表示にしたいと思い以下のようにしました。 abc.addEventListener(MouseEvent.MOUSE_OVER , mover); abc.addEventListener(MouseEvent.MOUSE_OUT , mout); function mover(e:MouseEvent):void{ var xyz:aru = new aru(); xyz.x = 380; xyz.y = 100; addChild(xyz); } function mout(e:MouseEvent):void{ removeChild(xyz); } こうすると、removeChild(xyz)が未定義のプロパティxyzへのアクセスです。となりエラーとなってしまいます。 mout関数内でxyzが定義されていないからでるエラーなのでしょうか? もしそうだとすると、期待動作を実現するにはどのようにプログラムすればよろしいのでしょうか? 以上何とぞよろしくお願いいたします!

    • ベストアンサー
    • Flash
  • FLEX 外部asの関数を実行する方法。

    nl.platipus.RenaultJointDevelopment.controls.GearBox.asというasの中に下記の関数があります。 private function makeLeverInteractive(param1:String) : void { switch(param1) { case "clickable": { lever.buttonMode = true; lever.useHandCursor = true; if (!lever.hasEventListener(MouseEvent.CLICK)) { lever.addEventListener(MouseEvent.CLICK, handleLeverClick, false, 0, true); } if (lever.hasEventListener(MouseEvent.MOUSE_DOWN)) { lever.removeEventListener(MouseEvent.MOUSE_DOWN, handleLeverMouseDown); } if (lever.hasEventListener(MouseEvent.MOUSE_UP)) { lever.removeEventListener(MouseEvent.MOUSE_UP, handleLeverMouseUp); stage.removeEventListener(MouseEvent.MOUSE_UP, handleLeverMouseUp); } break; } case "draggable": { lever.buttonMode = true; lever.useHandCursor = true; if (lever.hasEventListener(MouseEvent.CLICK)) { lever.removeEventListener(MouseEvent.CLICK, handleLeverClick); } if (!lever.hasEventListener(MouseEvent.MOUSE_DOWN)) { lever.addEventListener(MouseEvent.MOUSE_DOWN, handleLeverMouseDown, false, 0, true); } if (!lever.hasEventListener(MouseEvent.MOUSE_UP)) { lever.addEventListener(MouseEvent.MOUSE_UP, handleLeverMouseUp, false, 0, true); stage.addEventListener(MouseEvent.MOUSE_UP, handleLeverMouseUp, false, 0, true); } break; } default: { lever.buttonMode = false; lever.useHandCursor = false; lever.emphasize = false; if (lever.hasEventListener(MouseEvent.CLICK)) { lever.removeEventListener(MouseEvent.CLICK, handleLeverClick); } if (lever.hasEventListener(MouseEvent.MOUSE_DOWN)) { lever.removeEventListener(MouseEvent.MOUSE_DOWN, handleLeverMouseDown); } if (lever.hasEventListener(MouseEvent.MOUSE_UP)) { lever.removeEventListener(MouseEvent.MOUSE_UP, handleLeverMouseUp); stage.removeEventListener(MouseEvent.MOUSE_UP, handleLeverMouseUp); } break; break; } } return; }// end function このmakeLeverInteractiveという関数をnl.platipus.BasicATM.InhibitorSwitchAnimation.InhibitorSwitchAnimation.asの中で、 クリックすると実行するように書きたいのですが、できますでしょうか? もし、できるのであればその方法も教えていただけると助かります。

  • もっとなめらかな線を描く方法

    マウスダウンしたままマウスを動かすと軌跡が残るようにしてマウスアップでそれが終わるという、一般的な「線を描く」というプログラムをActionScript3で書きました。 しかし、以下のコードでは物足りないのです。もっとなめらかに線を描きたいのです、このコードではカクカクしていると感じます。updateAfterEventもしてみましたが、まだ満足できません。よいアルゴリズムなど、ご存じの方おりましたらアドバイスを下さい。よろしくお願いします。 言語は、ActionScript3で回答願いたいですが、AS2やAS1や他の言語しか知らないけど改善方法は思いつくといった場合、その言語でも構いません。なんとか翻訳してみようと思います //フレームアクションです var nowdown:Boolean=false; var oldX:Number=0; var oldY:Number=0; var g:Graphics=this.graphics; g.lineStyle(5,0x00ffff); stage.addEventListener(MouseEvent.MOUSE_DOWN,PushPen); function PushPen(e:MouseEvent):void{ trace("down"); nowdown=true; oldX=stage.mouseX; oldY=stage.mouseY; } stage.addEventListener(MouseEvent.MOUSE_MOVE,MovePen); function MovePen(e:MouseEvent):void{ trace("move"); if(nowdown){ trace("move","if"); g.moveTo(oldX,oldY); g.lineTo(stage.mouseX,stage.mouseY); oldX=stage.mouseX; oldY=stage.mouseY; e.updateAfterEvent(); } } stage.addEventListener(MouseEvent.MOUSE_UP,UpPen); function UpPen(e:MouseEvent):void{ nowdown=false; }

    • ベストアンサー
    • Flash
  • AS3のボタンアクションについて

    FlashCS3 ActionScript3.0 ボタンアクションでつまづいています。 http://www.cucinadicasamia.fr/ 上記サイトのように、ボタンをクリックすれば、ダウンの状態を保持、 他のボタンをクリックでダウンの状態を解除。 のようにしたいのですが、上手くいきません。 下記のようにコードを書いたのですが。。。 A_mc.addEventListener(MouseEvent.CLICK,Click); A_mc.addEventListener(MouseEvent.ROLL_OVER,Over); A_mc.addEventListener(MouseEvent.ROLL_OUT,Out); B_mc.addEventListener(MouseEvent.CLICK,Click); B_mc.addEventListener(MouseEvent.ROLL_OVER,Over); B_mc.addEventListener(MouseEvent.ROLL_OUT,Out); function Over(event:MouseEvent):void{ event.target.gotoAndPlay("B"); } function Out(event:MouseEvent):void{ event.target.gotoAndPlay("A"); } function Click(event:MouseEvent):void{ trace("click"); event.target.gotoAndPlay("C"); } A_mc.buttonMode = true; B_mc.buttonMode = true; /////////////////////////////////////////////////////////////////////// function Clickとfunction Overが同時に発生しているので上手くいかないのでしょうか。。。 ご教授お願いいたします。

  • ActionScript 3.0 D&Dの実装

    ステージ上に、インスタンス20個配置し (addChildは使わずに、普通に最初から置きます。  インスタンス名は mc1 ~ mc20)  それぞれをドラッグアンドドロップで自由に動かしたいです。 以下のようにプログラムを書いたのですが いざドラッグしようとすると 「TypeError: Error #1006: value は関数ではありません at MethodInfo-1()」 っとエラーが出てしまいました。 っと出てしまいました。 一体何が原因でしょうか? また、解決方法がありましたら是非ともよろしくお願いします。 addEventListener(MouseEvent.MOUSE_OVER,getname); function getname(e:MouseEvent) {    var str= e.target.name; trace(str); //マウスカーソルを乗せたムービークリップのインスタンス名が出ます。 addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown); function onMouseDown(e:MouseEvent) { str.startDrag(); } addEventListener(MouseEvent.MOUSE_UP, onMouseUp); function onMouseUp(e:MouseEvent) { str.stopDrag(); } }

    • ベストアンサー
    • Flash
  • 画面をドラッグ

    ActionScript3.0で画面をドラッグして移動させるflashを作っています。 マウスを離してからも少しだけ動くように*2.75しています。 しかしhoge_mcが画面外に出た時にif文やflagを使って止めようとすると進む力が残っているっぽくて確実に止まってくれません。 どなたかこの問題の解決法が分かる方いませんか? *ソースです。(ステージにhoge_mcを置けば動きます。) import caurina.transitions.Tweener; var startX:Number = 0; var cameraRange:Number = 0; var tweenNum:Boolean =false; this.stage.addEventListener(MouseEvent.MOUSE_DOWN, onDown); this.stage.addEventListener(MouseEvent.MOUSE_UP, onUp); function onDown(event:MouseEvent):void { tweenNum = false; this.stage.removeEventListener(MouseEvent.MOUSE_MOVE, onMove,false); startX = event.stageX; this.stage.addEventListener(MouseEvent.MOUSE_MOVE, onMove,false); } function onUp(event:MouseEvent):void { this.stage.removeEventListener(MouseEvent.MOUSE_MOVE, onMove,false); } function onMove(event:MouseEvent):void { trace(hoge_mc.x); if(tweenNum == true){ Tweener.removeTweens(hoge_mc); return; } var cameraIkata = event.stageX - startX; hoge_mc.x += cameraIkata; cameraRange = cameraRange + cameraIkata; Tweener.addTween(hoge_mc, {x:cameraRange*2.75, time:3, transition:"easeOut"}); startX = event.stageX; } stage.addEventListener(Event.ENTER_FRAME,loop); function loop(e:Event):void { if (hoge_mc.x > 401) { tweenNum = true; Tweener.removeTweens(hoge_mc); hoge_mc.x = 400.5; } if (hoge_mc.x < 0) { tweenNum = true; Tweener.removeTweens(hoge_mc); hoge_mc.x = 0.5; } }

  • 【as3】クリックでインスタンスを増やしたい

    Actionscript初心者です。 勉強のため、以下のURLにあるActionscript2.0のFlashをActionscript3.0に書き換えたいと思っています。 http://allabout.co.jp/gm/gc/66814/ 左側にリースのパーツ、右に素のままのリースが配置されています。パーツはそれぞれ、リボン付きベル(インスタンス名「bellBig」)、松ぼっくり (インスタンス名「matu」)、小さいベル(インスタンス名「bellSmall」)と指定してあります。この3つのアイテムをドラッグドロップすることでリースを飾り付けていきます。 インスタンスをドラッグ&ドロップする所まではできたのですが、 松ぼっくりと小さいベルをドラッグした際にインスタンスを複製するところでつまずいています。 あまりにも初歩的な質問で恐縮ですが、ご教授お願いいたします。 /*////////////////////大きいベル/////////////////////*/ // ドラッグ開始 bellBig.addEventListener(MouseEvent.MOUSE_DOWN,mouseDown1); function mouseDown1(event:MouseEvent):void{ bellBig.startDrag(); } // ドラッグ終了 bellBig.addEventListener(MouseEvent.MOUSE_UP,mouseUp1); function mouseUp1(event:MouseEvent):void{ bellBig.stopDrag(); } /*////////////////////まつぼっくり/////////////////////*/ // ドラッグ開始 matu.addEventListener(MouseEvent.MOUSE_DOWN,mouseDown); function mouseDown(event:MouseEvent):void{ matu.startDrag(); } //ドラッグ終了 matu.addEventListener(MouseEvent.MOUSE_UP,mouseUp); function mouseUp(event:MouseEvent):void{ matu.stopDrag(); } /*////////////////////小さいベル/////////////////////*/ // ドラッグ開始 bellSmall.addEventListener(MouseEvent.MOUSE_DOWN,mouseDown2); function mouseDown2(event:MouseEvent):void{ bellSmall.startDrag(); } // ドラッグ終了 bellSmall.addEventListener(MouseEvent.MOUSE_UP,mouseUp2); function mouseUp2(event:MouseEvent):void{ bellSmall.stopDrag(); }

  • 【AS3】ループ処理で関数名を作成するには?

    ActionScript3.0についてご教授ください。 forなどを使い、ループ処理を使って変数名を作成する要領で 関数名を作ることは可能なのでしょうか? やりたい処理を記述させて頂きますと次の通りです。 ステージにある3つのボタン「btn0」「btn1」「btn2」に対して マウスクリック時の処理を書こうとしている例文です。 もちろん、これではエラーになります。 for( var i:int; i<3; i++ ){   this["btn"+i].addEventListener( MouseEvent.MOUSE_DOWN,"on"+i );   function "on"+i( e:MouseEvent ):void{     trace( e.target.name );   } } こうした処理を実現したい場合、"on"+i 部分をどのように記述すると良いのでしょうか? もしご存知でしたらお知恵をいただけないでしょうか。 よろしくお願い致します。

    • ベストアンサー
    • Flash
  • マウスアウトで非表示にする

    シーン1に、mc(ムービークリップ)とcomment1(ムービークリップ)を配置 mcにマウスオーバーするとcomment1が表示される。 mcよりマウスアウトするとcommen1が非表示になる。 という感じにしたいのですが、マウスアウトしても非表示に出来ないで困っています。 //----------------------------------- MovieClip(root).comment1.visible = false; var pointX:Number=70; var pointY:Number=50; mc.addEventListener(MouseEvent.MOUSE_OVER, fl_MouseOver); function fl_MouseOver(event:MouseEvent):void { stage.addEventListener(MouseEvent.MOUSE_MOVE,mouseMoveFunc); function mouseMoveFunc(e:MouseEvent):void { MovieClip(root).comment1.visible = true; MovieClip(root).comment1.x=stage.mouseX+pointX; MovieClip(root).comment1.y=stage.mouseY+pointY; } } mc.addEventListener(MouseEvent.MOUSE_OUT, fl_MouseOver2); function fl_MouseOver2(event:MouseEvent):void { mc.removeEventListener(MouseEvent.MOUSE_OVER, fl_MouseOver); MovieClip(root).comment1.visible = false; } //-----------------------------------

    • ベストアンサー
    • Flash
  • AS3のコードをシンプルに

    AS3のコードについてご教授お願いします。 下記のようなコードがあるとします。 btnA_mc.addEventListener(MouseEvent.CLICK,aClick); btnB_mc.addEventListener(MouseEvent.CLICK,bClick); btnC_mc.addEventListener(MouseEvent.CLICK,cClick); function aClick(e:MouseEvent):void { this.gotoAndPlay("A"); // trace("Aclick"); btnB_mc.addEventListener(MouseEvent.CLICK,bClick); btnC_mc.addEventListener(MouseEvent.CLICK,cClick); btnA_mc.removeEventListener(MouseEvent.CLICK,aClick); } function bClick(e:MouseEvent):void { this.gotoAndPlay("B"); // trace("Bclick"); btnA_mc.addEventListener(MouseEvent.CLICK,aClick); btnC_mc.addEventListener(MouseEvent.CLICK,cClick); btnB_mc.removeEventListener(MouseEvent.CLICK,bClick); } function cClick(e:MouseEvent):void { this.gotoAndPlay("C"); // trace("Cclick"); btnA_mc.addEventListener(MouseEvent.CLICK,aClick); btnB_mc.addEventListener(MouseEvent.CLICK,bClick); btnC_mc.removeEventListener(MouseEvent.CLICK,cClick); } btnA_mc.buttonMode = true; btnB_mc.buttonMode = true; btnC_mc.buttonMode = true; この中の、 btnA_mc.addEventListener(MouseEvent.CLICK,aClick); btnB_mc.addEventListener(MouseEvent.CLICK,bClick); btnC_mc.removeEventListener(MouseEvent.CLICK,cClick); のような、重複する部分を、配列か何かでまとめたいのですが、いまいち方法が分かりません。 ボタンAをクリックで、ボタンAは効かなくなる。ボタンBorCをクリックでボタンAが復活みたいな感じです。 宜しくお願いします。 flashCS3 ASはver3.0でお願いします。

    • ベストアンサー
    • Flash

専門家に質問してみよう