ActionScriptのイベント処理で任意の時間遅らせて処理する方法

このQ&Aのポイント
  • ActionScript3.0でFLASHコンテンツを制作中の際、任意の秒数で処理を遅延させる方法を教えてください。
  • ブラウザのリサイズに伴ってオブジェクトを位置移動させる処理を任意の時間後に行う方法を教えてください。
  • http://www.duras.jp/ でブラウザをリサイズした際に後からオブジェクトが追従するような動きを実現する方法を教えてください。
回答を見る
  • ベストアンサー

ActionScriptのイベント処理で任意の時間遅らせて処理する方法

こんばんは。 現在、Actionscript3.0にてFLASHコンテンツを制作しております。 あるイベント処理の際に、任意の秒数処理を遅らせて実行したいと考えております。 例えば、 1.ブラウザのサイズを任意にリサイズする  (addEventListener RESIZEイベント呼び出し) ↓ 2.変更したサイズに合わせてステージ上のオブジェクトが指定の位置に移動する  (オブジェクトの位置を移動させる処理の実行) 2の動きを、ブラウザリサイズ後、任意の秒数置いてから実行させたいと考えています。 例で言うと以下サイトでブラウザをリサイズした際に、後からオブジェクトが追従するような動きです。 http://www.duras.jp/ ご教授宜しくお願いいたします。

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

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

  • ベストアンサー
  • chika_008
  • ベストアンサー率80% (20/25)
回答No.1

stage.addEventListener(Event.RESIZE, resized); /*resizeされたら*/ function resized(e:Event):void { var timer:Timer = new Timer(2000, 1); timer.addEventListener(TimerEvent.TIMER, timerEnd); timer.start(); } /*timerで2秒後に*/ function timerEnd(e:TimerEvent):void { /*ここで色々と動かす*/ } 基本は上記のようで大丈夫だと思いますが、 TweenerやTweenMaxやTweensyを使うともっと楽です。 stage.addEventListener(Event.RESIZE, resized); /*resizeされたら*/ function resized(e:Event):void { /*画面の中心*/ var w:int = stage.stageWidth / 2; var h:int = stage.stageHeight / 2; /*イージング*/ TweenMax.killTweensOf(target); TweenMax.to(target, 1, {x:w, y:h, delay:2}); } TweenMaxだと上記の書き方でtargetが2秒後にxとyにセンターの値をいれ1秒で移動してくれるという事になります。killTweensOfというのは再度ステージがリサイズされた時にTweenされていたものをリセットするという意味ととらえてください。

John12345
質問者

お礼

ご回答誠にありがとうございます。 TweenMaxを導入してみた所、理想としている動きができました。 TweenMaxではイージング設定もできるようなので設定したいと 考えておりますが、ネットで調べてもイージングの種類や使い方が詳細に 記載されているものが見つかりませんでした。 もしご存知でしたらご教授いただけませんでしょうか? 因みに、上記の指定秒数遅らせて移動したオブジェクト(インスタンス)を イージングを使って、目的の位置に近づきながらゆっくりした動きにしたいと考えています。 宜しくお願いいたします。

その他の回答 (1)

  • chika_008
  • ベストアンサー率80% (20/25)
回答No.2

イージング設定ですと http://blog.greensock.com/tweenmaxas3/ 上記のページのBASIC PROPERTY TWEENING INTERACTIVE DEMOという ところでイージングのファンクションの確認ができます。 例として下記のようにeaseの後にイージング方式を設定する感じです。 TweenMax.to(mc, 1, {x:293, y:330, ease:Quart.easeInOut}); またカスタムのイージングやイージングの強弱などもつけれるみたいです。多分ここは必要ないと思うのですが色々機能的で使いやすいですね。 http://blog.greensock.com/customease/

John12345
質問者

お礼

細かいアドバイスありがとう御座います! 思っている通りのものができそうです。 色々とお世話になりました。 またご教授いただくことがあるかと思いますが、 その時は宜しくお願い申し上げます。

関連するQ&A

  • ウインドウリサイズイベントをネット上で反映するには

    ウインドウリサイズイベントをネット上で反映するには AS3です。 フルFlashサイトを制作しております。 ブラウザのウインドウがリサイズされても つねにフル画面表示されるようにしたくて swfを作りました。 addEventListener(Event.RESIZE, windowResize); で ウインドウのリサイズイベントをswfファイルに持たせてあります。 ネットにアップした時に、ブラウザのウインドウサイズを変更しても swfのウインドウリサイズイベントが発生しません。。 ローカルでswfファイルを開いたときは、FlashPlayerのウインドウを変更すると リサイズイベントが作動するのですが。。 addEventListener(Event.RESIZE, windowResize);は 「FlashPlayer」のウインドウリサイズイベントであって 「ブラウザ」のウインドウリサイズイベントではないということでしょうか? ネットにアップした場合は、別途java Scriptとの絡みで ウインドウサイズを取得して関連づけなければ フラッシュのswfをリサイズできないのでしょうか? それともASだけで出来る方法があるのでしょうか? どなたかご存知の方いらっしゃいましたら どうかよろしくお願いいたします。

    • ベストアンサー
    • Flash
  • ブラウザ起動時に、ウインドウサイズ一杯にFlashを表示したい

    ブラウザ起動時に、ウインドウサイズ一杯にFlashを表示したい AS3です。ブラウザ起動時に、 ウインドウサイズ一杯にFlashを表示したいのですが 上手くいかずに困っています。。 IE FireFox Safari Opera 上記の4ブラウザ全てに対応したいのですが、 現在私がやっている手法では、FireFoxにしか対応できておりません。 わたしの今のやり方は、 Flashサイズを縦横100%でパブリッシュして、 swfのスクリプトでは -------------------------------------------------------- var w:Number // ブラウザ起動時の横幅 var h:Number // ブラウザ起動時の高さ stage.addEventListener(Event.RESIZE, wr); function wr(e:Event):void{ w = stage.stageWidth; h = stage.stageHeight; stage.removeEventListener(Event.RESIZE, wr); } -------------------------------------------------------- この様に書いています。 FireFoxでは、 Flashサイズを縦横100%でパブリッシュされていた場合、 ブラウザ起動時のウインドウサイズに一度Flashサイズがリサイズされるので その時に自動的にEvent.RESIZEが実行されるようなので そこで初期サイズを取得できています。 (functionで、Event.RESIZEをremoveして  1回だけ、リサイズイベントが起きるようにして、  そこでブラウザ起動時のウインドウサイズを取得しています。) しかし、他のブラウザでは、 「ユーザーがウインドウをリサイズする」というアクションを起こさないと Event.RESIZEが実行されないようですので、 ブラウザ起動時にウインドウサイズ一杯にFlashを表示できません。 何か他の方法があるのでしょうか。。? 世の中によくある、ウインドウサイズ一杯のFlashサイトは どのようにして作られているのでしょうか。。? どなたかご存知の方いらっしゃいましたら どうかよろしくお願いいたします。

    • ベストアンサー
    • Flash
  • 複数インスタンスに共通するイベント処理の方法

    こんにちは。 ActionScript3.0でサイト制作を行なっています。 マウスイベントのイベントリスナーを複数のボタンに登録する際に、 ループ処理によって登録できないか考えました。 例えば、 menu.buttonHome.addEventListener(MouseEvent.MOUSE_OVER, homeOver); menu.buttonAbout.addEventListener(MouseEvent.MOUSE_OVER, AboutOver); 上記は違うインスタンスにマウスオーバーのイベントを登録しておりますが、 記述にある「Home」「About」以外は全て共通の書式ですので、この部分だけ文字列を置き換えて処理できないでしょうか? 例えば、配列に「Home」「About」「Contact」のような文字列を格納し、上記イベントリスナーの指定の文字列だけを置き換えるという方法です。 また、上記のような文字列の置き換え以外にイベント処理の記述を簡略化する方法がありましたら是非ご教授ください。 宜しくお願いいたします。

    • ベストアンサー
    • Flash
  • actionscript3.0 オブジェクトの動的生成

    actionscript3.0についての質問です。 イラストレーターのテキストツールのように 任意の文字オブジェクトを複数生成し、生成された任意の文字オブジェクト をドラッグで移動する処理をactionScriptで実行したいと考えています。 現在actionscript3.0で行いたいと考えている一連の流れは以下の通りです。 1.ステージに配置したテキストフィールに任意の文字列を入力 2.入力された文字列を参照してムービークリップ内のダイナミックテキストに出力。 3.ステージにボタンを配置し、それを押すことでステージに1.2の手順によって作成されたムービークリップが生成。 4.生成されたムービークリップをドラッグすると動かすことができる。 1から3までの内容を下記のようなスクリプトで行いました。 //ダイナミックテキストを内包するためのムービークリップを定義 //埋め込みアセットクラスmcからインスタンスを生成 var word_mc:MovieClip = new mc( ); //ボタンクリックイベントを登録 create_btn.addEventListener( MouseEvent.Click, creClick ); //ボタンクリック時の処理 function creClick( evt:MouseEvent ):void { //テキストフィールドinputWordに入力されたテキストを変数inputに格納 var input:String = inputWord.text; //word_mc内に配置したダイナミックテキストoutputWordに入力テキスト内容を出力 word_mc.outputword.text = input; //word_mcを画面に表示 addChild( word_mc ); } //word_mcをドラッグで移動させるためのスクリプト word_mc.addEventListener( MouseEvent.MOUSE_OVER, wordMO ); function wordMO( evt:MouseEvent ):void { word_mc.addEventListener( MouseEvent.MOUSE_DOWN, wordMD ); word_mc.addEventListener( MouseEvent.MOUSE_UP, wordMU ); } function wordMD( evt:MouseEvent ):void { word_mc.startDrag( ); } function wordMU( evt:MouseEvent ):void { word_mc.stopDrag( ); } ひとつのオブジェクトを生成するだけならこれで問題ないのですが、 このスクリプトでは、、"車"、"自転車"、"飛行機"という文字列をそれぞれ内包した変数名もしくはクラス名の違うオブジェクトを生成することが できません。 埋め込みアセットクラスをあらかじめ複数作っておいて、クラス名を 連番で名づけ、クラス名から動的にオブジェクトを生成すれば 内容の異なるオブジェクトを生成することは可能ですが、 単語を追加するたびに埋め込みアセットクラスを作成しなければ ならない上、変数名は同じなため、個々のオブジェクトをマウスドラッグすることができません。 イラストレーターのテキストツールのように 任意の文字列を生成した後、個々にマウスドラッグできようにするには どうしたら良いのでしょうか。 どうかご指導のほど、よろしくお願い致します。

    • ベストアンサー
    • Flash
  • コンボボックスのイベント 更新後処理をしたい

    VB.NETのテキストボックス、コンボボックスで アクセスのAfterUpdate(更新後処理)と同じ動きをするイベントはどれですか? 「TextChanged」を使うと 例えばテキストボックスに「あいう」の「う」を打ち終わってから実行したいのに 「あ」を入力するだけで実行されてしまいます。 「あいう」と入力し終わってから実行するイベントはどれでしょうか? よろしくお願い致します。

  • FLASH8でActionscriptが動きません

    FLASH8のActionscriptを使って簡単なイベント処理を実行したいのですが、うまくいかず困っています。 conts1_btnというインスタンス名を付けたボタンをクリックしたら、Contents1というラベルを付けたフレームに飛ぶという処理です。 以下、そのコードです。 function go_conts1(btn1event) { this.gotoAndPlay("Contents1"); } conts1_btn.addEventListener(MouseEvent.CLICK,go_conts1); FLASH CS3の参考書を見て、記述したのですが8とCS3では記述方法に違いなどあるのでしょうか?宜しくお願いします。

  • JSのイベントターゲット が難しい

    JSのイベントターゲット (EventTarget)が難しくてよくわからないのですが初心者にもわかるように解説していただけるとありがたいです。 https://developer.mozilla.org/en-US/docs/Web/API/EventTarget イベントターゲット(EventTarget)は、DOMイベントを受け取り、それらへのリスナーを持つことが出来るオブジェクトによって実装されるDOMインターフェースです。 Elementと、 documentと、 windowは、ほとんどの共通イベントターゲットですが、 例えば、XMLHttpRequest、AudioNode、AudioContextなど、 他のオブジェクトもエベントターゲットになることが可能です。 多くのイベントターゲット(Element、document、windowを含む)は、 onXXXプロパティと属性を介して、 イベントハンドラの設定もサポートします。 メソッド .addEventListener() 要素にイベントハンドラを登録します。 .dispatchEvent() DOM内のノードのイベントを実行します。 .removeEventListener() EventTarget.addEventListenerを使用して登録されたイベントリスナーを削除します。 イベントを発動させる要素につけるイベントファンクションのようなものなのでしょうか?

  • イベントに独自引数を渡したい。

    ACTIONSCRIPT3.0で、外部ファイルを読み込ませる処理を行っているのですが、読み込み完了時の関数に独自の引数を渡すことは不可能なのでしょうか? var j:int = 100; var myArray:Array; for(var i=0;i<j;i++){  myArray[i] = new Loader();  myArray[i].load(new URLRequest(別の配列に入っている文字列のURL))  myArray[i].contentLoaderInfo.addEventListener(Event.INIT,myfunc); } function myfunc(e){イベント発生時の処理} のように、多数のイベント処理を書くときに配列のインデックスによって処理を分けたいのですが、上の例だとイベント発生時の関数であるmyfuncの引数は規定オブジェクトなので独自のものが渡せません。 いまは別にグローバルな配列を作成して処理をしているのですが、メモリ常駐になることや、オブジェクト指向として気に入らない状態です。 イベントが発生したオブジェクトの名前をキーにすることも考えましたが、どの道スマートではない。なにか方法はないものでしょうか? また、言語仕様的にやむをえないのでしょうか?

    • ベストアンサー
    • Flash
  • ブラウザのリサイズについて質問です

    すみませんが、ブラウザのリサイズについて質問があります。 ブラウザはネットスケープ4.7を使用しているのですが、 ブラウザのリサイズというのはいったいどういうものなのかいまいち理解できていません。 再読み込みしてるようにも見えますし、ただ、サイズが小さくなっている だけのようにも思えますし・・・ (リサイズして再び表示するまでにすごく時間がかかる場合もあれば、  すぐに表示される場合もあります) 今、私が作っているものは、リサイズさせること、 リサイズ前と違った動きをするのです。 ↓↓↓↓↓↓↓↓↓↓↓↓動き↓↓↓↓↓↓↓↓↓↓↓ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ <a herf>で、テキスト表示されている部分の領域を限定させて、 そこの部分にマウスがきた場合、ツールチップ(レイヤーを使って作りました)を 表示するようにしています。これが、はじめにブラウザ表示されたときは、 思い通りに(各行の特定の位置毎・マウス〈カーソル?〉の下位置で) 表示されるのですが、 リサイズしたあとになると、ツールチップがブラウザの中の 特定の位置でしか表示されなくなってしまいました。 (マウスのカーソルがある位置を無視して特定の場所にしか出なくなっている) +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ もし、知っていらっしゃるかたがいましたら、教えていただけませんでしょうか? また、”リサイズされた”というタイミングを取得する方法はあるのでしょうか? 『JAVA SCRIPT』で取得できるという話をきいたのですが・・・・ すみませんが、お詳しい方、ご教授ください。

    • ベストアンサー
    • HTML
  • VBAのExitイベントについて

    VBA(Excel)についてご質問します。 フォームにて、IDというオブジェクト名のテキストボックス、 Private Sub ID_Exit(ByVal Cancel As MSForms.ReturnBoolean) という関数(Exitイベント)を用意しました。 IDにフォーカスがある状態で、フォーカスを移動しようとすると、この関数が必ず実行されるかと思います。 そのとき、特定のボタン(例えばキャンセルボタン)がクリックされたためにフォーカスが移動したときは、この関数の処理を実行したくない。もしくはこの関数内で特定のボタンがクリックされたこと(そのためにフォーカスが移動したこと)を検出して、処理をスキップしたいです。 どうすれば実現できますでしょうか? よろしくお願いします。

専門家に質問してみよう