AS3.0のカスタムクラスを使ったFlashプログラム作成の方法

このQ&Aのポイント
  • Flash AS3.0を使って出席を確認するプログラムを作成中。カスタムクラスを利用すると思った通りに動作しない。カスタムクラスを使って動作させる方法を教えてほしい。
  • AS3.0のカスタムクラスを使ったFlashプログラム作成中、動作しない問題が発生している。カスタムクラスを使ってプログラムを動作させる方法を教えてほしい。
  • Flash AS3.0を使用して出席確認プログラムを開発中。カスタムクラスを利用すると動作が思った通りにならない。カスタムクラスを使用してプログラムを正常に動作させる方法について教えてほしい。
回答を見る
  • ベストアンサー

AS3.0のカスタムクラスを使いたいのですが

Flash AS3.0を使って出席を確認するプログラムを作っているのですが、カスタムクラスを利用して動作させようとすると思った通りに動作しません。 下のプログラムをカスタムクラスを使って動作させるにはどうすればいいのか教えてもらえないでしょうか、よろしくお願いします。 ________________________________________________________________________________________________________ import flash.geom.*; import flash.utils.*; import flash.events.*; import flash.display.*; var starttime:Number; var stoptime:Number; var reset:Number; var flag:int; var sec; var min; var hou; var h; var m; Clock.addEventListener(Event.ENTER_FRAME,getdate); time1.addEventListener(Event.ENTER_FRAME,count); mc1.addEventListener(Event.ENTER_FRAME,changecolor); btn1.addEventListener(MouseEvent.CLICK, ST); function getdate(e:Event):void{ //時間情報の取得 var time :Date = new Date(); var year = time.getFullYear(); var mon = time.getMonth()+1; var day = time.getDate(); h = time.getHours(); m = time.getMinutes(); //時計の桁あわせ h = ((h < 10) ? "0" : "") + h; m = ((m < 10) ? "0" : "") + m; //テキストに書き込む Clock.text =""+year+"/"+mon+"/"+day+" "+h+":"+m; } function count(e:Event):void{ if(flag==1){ var mil = getTimer() - reset; sec = Math.floor(mil/1000); min = Math.floor(sec/60); hou = Math.floor(min/60); // 次の単位を超えないように制限 mil %= 1000; sec %= 60; min %= 60; //時間の桁をあわせる min = ((min < 10) ? "0" : "") + min; hou = ((hou < 10) ? "0" : "") + hou; // すべてつなげて文字として表示 timer1.text ="経過時間 "+hou + " : " + min; }else{ timer1.text ="経過時間 00 : 00"; } } function changecolor(e:Event){ var trans:Transform = new Transform(mc1); var colorTrans:ColorTransform = new ColorTransform( 1, 1, 1, 1, 0, 0, 0, 0); if(flag==1){ if(sec <20){ colorTrans.redOffset = 0; colorTrans.greenOffset = 0; colorTrans.blueOffset = 255; } if(sec >=20 && sec <40){ colorTrans.redOffset = 0; colorTrans.greenOffset = 255; colorTrans.blueOffset = 0; } if(sec>=40 && sec<60){ colorTrans.redOffset = 255; colorTrans.greenOffset = 0; colorTrans.blueOffset = 0; } } trans.colorTransform = colorTrans; } function ST(event:MouseEvent):int{ if(flag == 0){ flag = 1; Startstop1.text ="入室時間"; time1.text =""+h+":"+m; reset = getTimer(); }else{ Startstop1.text ="退室時間" time1.text =""+h+":"+m; flag = 0; } return flag; } _______________________________________________________________________________________

noname#182049
noname#182049
  • Flash
  • 回答数1
  • ありがとう数2

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

  • ベストアンサー
回答No.1

スクリプトはASファイルにして外に出すと タイムラインに書くのと違って thisがムービーのフレームじゃなくて そのクラスのインスタンスになります つまるところstageの参照切れてるから 多分コンストラクタに入れてるだろう Clock.addEventListener(Event.ENTER_FRAME,getdate); time1.addEventListener(Event.ENTER_FRAME,count); mc1.addEventListener(Event.ENTER_FRAME,changecolor); btn1.addEventListener(MouseEvent.CLICK, ST); このへんが動かない 一番書き直しが少なく済むのは コンストラクタでthisとか渡して そっから動かしたいインスタンスをたどる方法 ■タイムライン new MyClass(this) ■ASファイル public function MyClass(tgt:DisplayObjectContainer){ tgt.getChildByName('Clock').addEventListener(Event.ENTER_FRAME,getdate); tgt.getChildByName('time1').addEventListener(Event.ENTER_FRAME,count); tgt.getChildByName('mc1').addEventListener(Event.ENTER_FRAME,changecolor); tgt.getChildByName('btn1').addEventListener(MouseEvent.CLICK, ST); } そんなカンジ

noname#182049
質問者

お礼

回答ありがとうございます。 ASを始めたばかりで解らないことが多く、困っていたので助かりました。 さっそく試してみます。

関連するQ&A

  • 時間と連動させたい

    いま、どうしてもFlashを使わなくてはならなくて困っています。 常にPCの時間を取得監視しつつ、x時x分x秒になった時にxxを実行させるという物を作りたんですが、どうしたらいいですか。 例えば、15時59分にFlashを開いたとして、16時になったときに外部ファイル(swf)などを読み込んだり、 他のURLに飛ぶようにしたんです。 こんな感じにやってはみたんですが、 指定時間になってwindowは開くんですけど、たくさんwindowが開いてしまいます。 よろしくお願いします。 addEventListener(Event.ENTER_FRAME,timenow); function timenow(event:Event){ var time:Date; time = new Date(); var hour:Number = time.getHours(); var min:Number = time.getMinutes(); var sec:Number = time.getSeconds(); if(hour==16 && min==00 && sec==00){ navigateToURL(new URLRequest("xxx"), "_blank"); } }

  • JavaScriptからphp関数の呼び出し

    javaScriptで1秒毎にphpの関数を呼び出しているのですが、 php側で、returnしている日時が動的に表示されません。 何がいけないのか教えて頂けますでしょうか? 色んな参考ページを見ると、phpの関数で動的に 動かせると書いてあるのですが、動的になりません。 -------------------------------------------------------- <jsphptest.htmlソース> <html> <head> <script type="text/javascript"src="jsphptest.php"></script> <script language="javascript"> <!-- function time() { //JavaScriptで日時表示 var now = new Date(); mon = now.getMonth()+1; day = now.getDate(); hou = now.getHours(); min = now.getMinutes(); sec = now.getSeconds(); year = now.getYear(); if (year < 2000) { year += 1900; } if (mon <= "9"){mon = "0" + mon;}; if (day <= "9"){day = "0" + day;}; if (hou <= "9"){hou = "0" + hou;}; if (min <= "9"){min = "0" + min;}; if (sec <= "9"){sec = "0" + sec;}; document.form1.j_tokei.value= year +"/"+ mon +"/"+ day +" "+ hou +":"+ min +":"+ sec; //PHP関数の呼び出し document.form1.p_tokei.value= php_time(); //1秒毎 setTimeout('time()',1000); } // --> </script> </head> <body onLoad="time();"> <form name="form1" mathod=post> JavaScript日時<input type="text" name="j_tokei" size=25><br> PHP日時<input type="text" name="p_tokei" size=25> </form> </body> </html> -------------------------------------------------------- <jsphptest.phpソース> <?php $str .= "function php_time(){"; $str .= "return('".date('Y-m-d H:i:s')."');"; $str .= "}"; echo $str; ?>

  • アクションスクリプトを簡素化したいです。

    myMovieClipというムービークリップのカラーをmy_btn01、my_btn02、my_btn03という3つのボタンで 変化させるシミュレーターを作っています。下に書いたようにすれば動くのですが共通する文言が 多いのですっきりと簡素化したいです。実際はボタンが16個あり、色を変えるパーツも20くらいある のでファイルサイズも考慮して少しでも簡素化したいです。基礎的な質問で申し訳ないですが何卒 ご指導宜しくお願いいたします。 //以下アクションスクリプト タイムラインにべた書きしています(これもクラス?とかにできればと。) import flash.geom.ColorTransform; import flash.geom.Transform; my_btn01.addEventListener( MouseEvent.CLICK , onClick01 ); function onClick01( event:MouseEvent ) { var trans:Transform = new Transform(myMovieClip); var colorTrans:ColorTransform = new ColorTransform(1,1,1,1,0,0,0,0); colorTrans.redOffset = 250; colorTrans.greenOffset = 30; colorTrans.blueOffset = 0; trans.colorTransform = colorTrans; } my_btn02.addEventListener( MouseEvent.CLICK , onClick02 ); function onClick02( event:MouseEvent ) { var trans:Transform = new Transform(myMovieClip); var colorTrans:ColorTransform = new ColorTransform(1.15,1.05,0.85,1,0,0,0,0); colorTrans.redOffset = 244; colorTrans.greenOffset = 60; colorTrans.blueOffset = -178; trans.colorTransform = colorTrans; } my_btn03.addEventListener( MouseEvent.CLICK , onClick03 ); function onClick03( event:MouseEvent ) { var trans:Transform = new Transform(myMovieClip); var colorTrans:ColorTransform = new ColorTransform(1,2,1,1,0,0,0,0); colorTrans.redOffset = 0; colorTrans.greenOffset = 0; colorTrans.blueOffset = 0; trans.colorTransform = colorTrans; }

    • ベストアンサー
    • Flash
  • Flash ボタンを押すとフォントカラーを変更する

    Flash CS5を使用しています。 action script3.0にてボタンを押すとフォントのカラーを変更できるようにしたいと思っています。 テキストのインスタンス名 text0 にして下記のようなスクリプトを書いたのですが 色が変更されません。 どのようにしたらよいか分かる方、お力を貸していただけないでしょうか? red_btn.addEventListener(MouseEvent.CLICK, fl_MouseClickHandler); function fl_MouseClickHandler(event:MouseEvent):void { var color_mtx = new flash.geom.ColorTransform(0.9, 0, 0, 1, 0, 0, 0, 0); text0.transform.colorTransform = color_mtx; }

    • ベストアンサー
    • Flash
  • FLASHでコンパイルエラーが出てしまいます

    FLASH(CS5)にてカウントダウンを作っています。 (作っていますといっても、ネットでいろいろ調べて引用したものです:引用したサイト様はFLASH8で作成したようです) しかしながら、 以下のAS(2.0で作成)を記載してダイナミックテキストに表示させようとしてもコンパイルエラーが出てしまいます。 コンパイルエラー内容 シーン=シーン 1, layer=ao, frame=1、行 7 シンタックスエラー ※該当箇所:var currentTime = today.getTime(); シーン=シーン 1, layer=ao, frame=1、行 6 演算子 '=' は、オペランドの前に来る必要があります。 ※該当箇所:var today:Date = new Date(); AS内容 this.onEnterFrame = function(){ /* ------------------------------------------------------------     ●現在のローカル時間を取得     ●1970年1月1日0時から現在時刻までのミリ秒を取得 ------------------------------------------------------------ */     var today:Date = new Date();     var currentTime = today.getTime(); /* ------------------------------------------------------------     ●カウントダウンの日付を指定     ※この場合は「2012年7月14日 0時0分0秒」とする ------------------------------------------------------------ */     var targetDate:Date = new Date(2012,6,14,0,0,0); /* ------------------------------------------------------------     ●1970年1月1日0時からカウントダウンの日付までのミリ秒を取得 ------------------------------------------------------------ */     var targetTime = targetDate.getTime(); /* ------------------------------------------------------------     ●【カウント日時】-【現在日時】=【残り時間】 ------------------------------------------------------------ */     var timeLeft = targetTime - currentTime; /* ------------------------------------------------------------     ●残り時間をそれぞれ「秒、分、時、日」に変換 ------------------------------------------------------------ */     var sec = Math.floor(timeLeft/1000);     var min = Math.floor(sec/60);     var hrs = Math.floor(min/60);     var days = Math.floor(hrs/24); /* ------------------------------------------------------------     ●カウントダウン開始     ※残り時間が過ぎていれば(マイナスであれば)カウントダウン停止&数字を空にする ------------------------------------------------------------ */     if(timeLeft <= 0){         delete this.onEnterFrame;         _root.time_days.text = _root.time_hrs.text = _root.time_mins.text = _root.time_secs.text = "";         /* --------------------------------------------------------         カウント終了後、動作させたい場合はココに追記してください         ※ページ移動なら、getURL("http://www.google.co.jp/"); など         -------------------------------------------------------- */     } else {         days = string(days);         //秒が1桁なら2桁に変換         sec = string(sec % 60);         if(sec.length < 2){             sec = "0" + sec;         }         //分が1桁なら2桁に変換         min = string(min % 60);         if(min.length < 2){             min = "0" + min;         }         //時が1桁なら2桁に変換         hrs = string(hrs % 24);         if(hrs.length < 2){             hrs = "0" + hrs;         }         var counter_days:String = days;         var counter_hrs:String = hrs;         var counter_mins:String = min;         var counter_secs:String = sec;         _root.time_days.text = counter_days;         _root.time_hrs.text = counter_hrs;         _root.time_mins.text = counter_mins;         _root.time_secs.text = counter_secs;</span>     } } 作成している全体図は タイムラインにAS用のレイヤーを作成してそこに上記のASを入れています。 その下のレイヤーにメインとなるレイヤーにダイナミックテキストを4つ(日、時、分、秒) その下のレイヤーに、装飾画像をいれています。 ダイナミックテキストのインスタンス名とASの出力する名前は間違っておりません。 ネットで調べて、コピペでできるはずとおもったのですが、「コンパイルエラー」出てしまい、 修正できず壁に当たっております。 御手数ですが、どなたか、ご教授下さい。 よろしくお願いいたします

    • ベストアンサー
    • Flash
  • buttonの色を変えたい

    お世話になります。 Flash CS5 ActionScript 3.0 で作成しております。 mybuttonというカスタムクラスを作成して、toggle=trueの時に、 selectedの状態がtrue,falseの時で、色を変えたいと思い 下記のソースを作りました。 しかしながら、下記のソースでは、 ステージにmybuttonを置く→(ソースではなく、画面上から)プロパティを選択してselected=trueにした場合、起動時に※(1)を通らずに、※(2)を通ってしまい うまくいきません。 一度起動した後は、きちんとselected=true:(1) selected=false:(2)となり、意図した 動きとなります。 目的としては、(ソースではなく、画面上の)プロパティでselected=trueで起動した 場合に(1)を通るようにしたいのですがどうしたらよいでしょうか? ※ソースでselected=trueを書くのは×です。 すみませんがよろしくお願いします。 ----------------myButton.as-------------------- package {   import fl.controls.Button; import fl.controls.*; import flash.events.*; import flash.geom.*; import flash.text.*; public class myButton extends Button { var color0 : ColorTransform = new ColorTransform;OFFの色 var colorON : ColorTransform = new ColorTransform(0,0,0,0.5,1,1,1,0);ONの色 //fontとサイズの変更 var buttonLabelFormat:TextFormat=new TextFormat(); //コンストラクタ public function myButton() { buttonLabelFormat.font = "MSゴシック"; buttonLabelFormat.size =8; addEventListener(Event.CHANGE,myButton_Change); Change(); } public function myButton_Change(e:Event):void{ Change(); } public function Change():void{ if(selected) { transform.colorTransform = colorON;※(1) } else { transform.colorTransform = color0;※(2) } } } }

    • ベストアンサー
    • Flash
  • AS 3 mouseout & over

    以下のようにMOUSEOUT,MOUSEOVERをつかって、 インスタントにマウスオーバーするとその幅が増えていき、幅200のところで止まる。 インスタントからマウスアウトするとその幅が減っていき、幅60のところで止まる。 という事を意図して、記述しました。 しかしながら、マウスオーバーの内容は意図した通りのいくのですが、 マウスアウトの場合は少し幅が減っただけで、すぐに止まってしまいます。 どのように直せば、意図した通りに行くのでしょうか? お知恵をいただければ幸いです。 package { import flash.events.MouseEvent; import flash.events.Event; import flash.display.Sprite; public class main extends Sprite { var _sikaku:Sprite = new Sprite(); public function main(){ _sikaku.graphics.lineStyle(6,0x330066); _sikaku.graphics.drawRect(0,0,120,120); this.addChild(_sikaku); _sikaku.addEventListener(MouseEvent.MOUSE_OVER,big_off); _sikaku.addEventListener(MouseEvent.MOUSE_OUT,big_on); function big_on(event:Event):void { _sikaku.addEventListener(Event.ENTER_FRAME,tijimi); function tijimi(event:Event):void { if(_sikaku.width==60 ) { _sikaku.removeEventListener(Event.ENTER_FRAME,tijimi); } if(_sikaku.width > 60) { _sikaku.width -= 1} trace("stop!") } } function big_off(event:Event):void { _sikaku.addEventListener(Event.ENTER_FRAME,kakudai); function kakudai(event:Event):void { if(_sikaku.width < 200) { _sikaku.width += 1 trace("stop?") } if(_sikaku.width == 200) { _sikaku.removeEventListener(Event.ENTER_FRAME,kakudai); } } } } } }

  • [AS3]テキストファイルの存在確認

    今、テキストファイルを外部から読み込んでその内容を表示するフラッシュをactionscript3.0で作っています。 ソースは以下のように、 import flash.net.URLLoader; import flash.net.URLRequest; import flash.net.URLVariables; import flash.events.Event; var myLoader:URLLoader = new URLLoader(); var myRequest:URLRequest = new URLRequest("data.txt"); myLoader.addEventListener(Event.COMPLETE, onComplete); myLoader.load(myRequest); function onComplete (eventObject:Event) { var my_str:String = eventObject.target.data mytextfield.text=my_str } というう風にしているのですが、テキストファイルがサーバー上に存在しないと、このアドレスは存在しないといわれエラーを吐き出すのでファイルが存在するか確認してから、読み込みたいのですが何か良い方法はないでしょうか? よろしくお願いします。

    • ベストアンサー
    • Flash
  • ASだけで○秒停止する方法

    AS3で下記のスクリプトを書いています。 画像をぼかした状態で徐々に表示させ、ぼかしがなくなったら○秒見せて ぼかしながら消していくという内容を想定しています。 ひとまず動くのですが、ぼかしながら消していく関数を実行する前に任意の 秒数(フレーム数?)停止させたいのですが、どうすればいいのでしょうか? package { import flash.display.*; import flash.events.*; import flash.utils.* import fl.events.*; import flash.filters.*; public class Main extends MovieClip { public var logoObj1:MovieClip = new logo1(); public var blur:BlurFilter; public var i:uint = 70; public var ii:uint = 0; public function Main():void { opening(); } private function opening(e:Event = null):void { blur = new BlurFilter(); addEventListener(Event.ENTER_FRAME, BlurMinus); } private function BlurMinus(e:Event):void { blur.blurX = i; blur.blurY = i; logoObj1.filters = [blur]; logoObj1.x = w / 2; logoObj1.y = h / 2; addChild(logoObj1); if ( i == 0 ) { // ここで任意の秒数を経過したらBlurPlasを実行させたい! addEventListener(Event.ENTER_FRAME, BlurPlas); } i = i - 2; } private function BlurPlas(e:Event):void { blur.blurX = ii; blur.blurY = ii; logoObj1.filters = [blur]; logoObj1.alpha += (0 - logoObj1.alpha) / 50; if ( logoObj1.alpha == 0 ) { removeEventListener(Event.ENTER_FRAME, BlurMinus); removeEventListener(Event.ENTER_FRAME, BlurPlas); } ii = ii + 2; } } }

    • ベストアンサー
    • Flash
  • フェードインから反転のアニメーション:actionscript

    ActionScriptでランダムに画像を読み込んだ状態でランダムフェードインして、ランダム秒数後に反転する。 反転すると違う画像がランダムに読み込まれていて、そしてまたランダム秒数後にまた反転してひっくり返るとまたランダムに画像が読み込まれているという、変わったアニメーションを作りたいのですが。(下の図を参照してください。) 現在ここまで↓できていて、xscaleを使えばできそうな感じなのですが、どうスクリプトを組めばよいかわかりません、どなたか教えてください。 環境;Flash 8,ActionScript2.0 ------------------------------------------------------------------- 回転させるparent_mcの1フレームに記述: // フェードイン設定 var load_time:Number = getTimer(); var wait_time:Number = Math.random()*1000; this._alpha = 0; // 反転タイマー関数 function InversionTimer() { flg++; } // ランダム秒設定 var max_sec:Number = 9; var min_sec:Number = 4; var random_sec:Number = Math.floor(Math.random()*(max_sec-min_sec+1))+min_sec; // フラグ変数 var flg:Number = 0; // MCのスケール関係 var scale:Number = 100; var scale_spd:Number = 8; this.onEnterFrame = function() { if (load_time+wait_time<getTimer()&&flg==0) { this._alpha += 2; if (this._alpha>99) { this._alpha = 100; flg = 1; setTimeout(InversionTimer, random_sec*1000); } } if (flg==2) { this.loader._xscale = scale; scale -= scale_spd; if (scale<=0) { scale = 0; this.child_mc.unloadMovie(IMG); flg = 3; } } else if (flg==3) { ???????????? } };

    • ベストアンサー
    • Flash