• 締切済み

ActionScript3.0にて描画させたい!

2秒ほどかけて次の描画を実現させたいのでお力下さい! 真っ白の画面があり、(円形のマスクでロゴの全体が隠れているというイメージ。) 真下から両側に弧を描きながらロゴが見えてくる。(円形のマスクがロゴの中心を軸に真 下から上に開いていくイメージ) というものです。 言葉で表現するのがむずがしいのですが、 as初心者です。 現在はフレームアニメーションで(48フレーム分の絵を描いて)対応しましたが、 データが重いうえ、秒数の調整で融通が効かず大変です。 asで対応が出来るものならぜひ、この機会に触れておきたいと思い質問をさせて頂 きました。よろしくお願い致します。

  • Flash
  • 回答数3
  • ありがとう数1

みんなの回答

noname#129900
noname#129900
回答No.3

#1 > trace( ''+e.target.currentCount ); > という部分にエラーがでますが、なぜでしょうか? > 何度もすみません。よろしくお願い致します。 タイマーのイベントをトレースしているだけなので、 動かないのであれば、コメントアウトするなり削除するなりしてください。 また、参考URLのマニュアルをみながら、 提示したコードをたたき台にし、目的にあったコードに書き換えて下さい。

metasekoiya
質問者

お礼

大変勉強になりました。ありがとうございます。 何度もご質問してすみませんでした。 これをキッカケにして、ASをしっかり勉強させて頂きます。 本当にありがとうございました。

noname#129900
noname#129900
回答No.2

#1 タイマークラスのインスタンス名を間違えていました。 cmaskというのはマスクの名前なので、 var tm:Timer = new Timer( 1000, 60 ); といった感じにしてください。 あとは、cmask.y 以外の cmask を tm に置き換えてください。 お手数おかけします。

metasekoiya
質問者

補足

trace( ''+e.target.currentCount ); という部分にエラーがでますが、なぜでしょうか? 何度もすみません。よろしくお願い致します。

noname#129900
noname#129900
回答No.1

既にオーサリングツール上に、ロゴとマスクがあるので、 それに名前がついていればasで操作できます。 マスクの移動制御には、Timer, TimerEventクラスを使用します。 // フレームに記述 // Y軸の移動量 var y_mvnum = 5; // cmask : マスクにつけた名前 cmask = new Timer( 1000, 60 ); // 時間は調整する事 cmask.addEventListener( TimerEvent.Timer, TMHandler ); cmask.addEventListener( TimerEvent.Timer_COMPLETE, CompleteTMHandler ); cmask.start(); // タイマー始動中ハンドラ function TMHandler( e:TimerEvent ):void { cmask.y -= y_mvnum; trace( ''+e.target.currentCount ); } // タイマー終了ハンドラ function CompleteTMHandler( e:TimerEvent ):void { cmask.removeEventListener( TimerEvent.Timer, TMHandler ); cmask.removeEventListener( TimerEvent.Timer_COMPLETE, CompleteTMHandler ); trace( 'complete' ); }

参考URL:
http://livedocs.adobe.com/flash/9.0_jp/ActionScriptLangRefV3/flash/utils/Timer.html
metasekoiya
質問者

補足

早速の回答ありがとうございます。 勉強不足で大変恐縮なのですが、 エラーが出ます。なぜでしょうか? マスクにはcmaskと名前を付けましたが、上手くいきません。 どうかよろしくお願い致します。

関連するQ&A

  • 描画のカクカクについて

    描画された画像が移動中たまに(動画を見ながら実行すると多く)カクカクするのですが、どうしたらこのカクカクをなくすことができるでしょうか? 多分ここだろうなと言うところを載せます。 //グローバル変数 static HDC g_hdcOff,g_hdcImg[MAX_IMAGE]; static HBRUSH g_hbrBg = NULL; // 背景用ブラシ static HBITMAP g_hbmImg[IMG_MAX]= {NULL}; // 画像のビットマップ //================================================================================ // オフスクリーンへ画像表示 // idx : 画像データの添え字 // x,y : 表示位置x,y // sx,sy : 画像切り出し位置x,y // w,h : 画像切り出し幅、高さ // src : 転送モード指定。通常はSRCCOPY,SRCPAINT,SRCANDなど //================================================================================ void DrawImg(int idx,int x,int y,int sx,int sy,int w,int h,DWORD src) { BitBlt(g_hdcOff,x,y,w,h,g_hdcImg[idx],sx,sy,src); } //================================================================================ // オフスクリーンへ画像表示。マスク表示→画像表示 // idx : 画像データの添え字 // x,y : 表示位置x,y // sx,sy : 画像切り出し位置x,y // w,h : 画像切り出し幅、高さ // mx,my : マスク切り出し位置x,y //================================================================================ void DrawImgMask(int idx,int x,int y,int sx,int sy,int w,int h,int mx,int my) { BitBlt(g_hdcOff,x,y,w,h,g_hdcImg[idx],mx,my,SRCPAINT); BitBlt(g_hdcOff,x,y,w,h,g_hdcImg[idx],sx,sy,SRCAND); } void Draw() { // 画面消去 HBRUSH oldbr = (HBRUSH)SelectObject(g_hdcOff, g_hbrBg); Rectangle(g_hdcOff, -1, -1, CLIENT_WIDTH+1, CLIENT_HEIGHT+1); SelectObject(g_hdcOff, oldbr); //---------------------------------------------------------- // ↓ここから描画処理 // キー状態の更新 KeyUpdate(); // プレイヤー移動 if (KeyIsHold(KC_LEFT)) { g_Player.x -= PL_VELX; if (g_Player.x < PL_LIMITL) g_Player.x = PL_LIMITL; } if (KeyIsHold(KC_RIGHT)) { g_Player.x += PL_VELX; if (g_Player.x > PL_LIMITR-g_ImgData[g_Player.type].w) g_Player.x = PL_LIMITR-g_ImgData[g_Player.type].w; } // プレイヤーの表示 DrawChr(g_Player.type, g_Player.x, g_Player.y); // ↑ここまで描画処理 //---------------------------------------------------------- // 再描画 InvalidateRect(g_hWnd,0,FALSE); UpdateWindow(g_hWnd); } // キャラクタ描画関数 // type : キャラタイプ(eChrType) // x : 表示位置X // y : 表示位置Y void DrawChr(int type,int x,int y) { DrawImgMask(g_ImgData[type].idx, x,y, g_ImgData[type].sx, g_ImgData[type].sy, g_ImgData[type].w, g_ImgData[type].h, g_ImgData[type].mx, g_ImgData[type].my); } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { ・・・ ・・・ ・・・ // メッセージループ while(true) { if (PeekMessage(&msg, NULL, 0,0,PM_REMOVE)) { if (msg.message == WM_QUIT) break; TranslateMessage(&msg); DispatchMessage(&msg); } else { static DWORD before_time; DWORD now_time; DWORD ideal_time=0; static int frame=0; TCHAR buff[100]; DWORD team=0; static long surplus_time=0; now_time=timeGetTime(); if(!before_time) before_time=timeGetTime(); surplus_time=(long)(now_time-before_time); ideal_time=(DWORD)(frame*1000)/60; wsprintf(buff,TEXT("%d %d %d\n"),ideal_time,surplus_time,(long)ideal_time-surplus_time); OutputDebugString(buff); if((long)ideal_time-surplus_time>0) Sleep((long)ideal_time-surplus_time); team=timeGetTime(); team-=before_time; if(team>=1000) { before_time=timeGetTime(); frame=0; } frame++; } Sleep(1); } ・・・ ・・・ ・・・ return (int)msg.wParam; } 環境はVC++2005、C言語とWINAPIっだけです。 説明が足りないのなら補足します。

  • HTMLファイルの置き方による読み込み速度の違い

    初めてHPを作ったのですが、ファイルのまとめ方で分からないことがあります。今のファイルの階層は、 ├index.htm ├その他のフレーム用HTMLファイル ├スタイルシート ├imageフォルダ └フレーム非対応用フォルダ  ├フレーム非対応用imageフォルダ  ├フレーム非対応用HTMLファイル  └フレーム非対応用スタイルシート となっています。 しかし、フレーム非対応用のimageデータはフレームを使ったページとほぼ同じ物を使用しているので、フレーム用とフレーム非対応用のimageフォルダを1つにしたいと考えています。 また、index.htmでフレーム用とフレーム非対応用を分け、それぞれのフォルダにしたいと考えています。予定は以下のようにです。 ├index.htm ├imageフォルダ ├フレーム用フォルダ └フレーム非対応用フォルダ さて、そこで、疑問がわいてくるのですが、いままで、たった1つ下の階層にあったそれぞれのイメージファイルたちが、1つ上の階層の他のフォルダの中に移動されたら、読み込む際の速度はどうなるのでしょうか。 普通のダイヤルアップで接続してくる人たちを基準とした速度の違いを知りたいと思います。 いろんなHPや、本で調べては見たのですが、ファイルの置き方について見つけられず困っています。もし、そのようなことの載っている本やHPをご存知でしたら教えて頂けないでしょうか。 また、HPはまだアップする段階にいたっておらず、HPのアドレスはないです。 たいへん長くなってしまいましたが、どうぞよろしくお願いいたします。

    • ベストアンサー
    • HTML
  • actionscript 3.0 で画面の再描画をしたい

    actionscript 3.0 で画面の再描画をしたい お世話になります。 actionscript 3.0 で作成をしております。 点を5つ打つscriptを作成したのですが、 描かれた点が順に1つずつ表示したいのですが、 一度に5個表示されてしまいます。 updateAfterEvent()を点を一つ打った後に入れれば、画面が描画される とお思ったのですが、実行すると updateAfterEvent();は関数でありませんとでます。 どのようにすれば、点を1つずつ表示できるでしょうか? お手数ですが、よろしくお願いします。

    • ベストアンサー
    • Flash
  • 画面遷移を等間隔にしたい 

    たびたびの質問ですがよろしくお願いします。win・cs3・as2で作成中です。 http://www.tokyo-eden.com/ このtopページのような、マスクを使った画面が切り替わるflashを作成しております。 それを4パターン(top_01.swf、top_02.swf、top_03.swf、top_04.swf)作って、親のswf(parent.swf)に読み込む形にしています。 ●top_01~04.swfは、レイヤーが6つに分かれており、順番に レイヤー6:AS レイヤー5:画像1のマスク レイヤー4:画像1 レイヤー3:画像2のマスク レイヤー2:画像2 レイヤー1:画像1(onloadで読み込まれるもの) といった感じです。(※image1、実際にはもっとフレーム数が多くなってしまっていますが、わかりやすく短くした画像をのせました) ●parent.swfは、レイヤーを5つに分けており、順番に レイヤー5:AS レイヤー4:top_01.swfを読み込むMC(インスタンス名:mc_01) レイヤー3:top_02.swfを読み込むMC(インスタンス名:mc_02) レイヤー2:top_03.swfを読み込むMC(インスタンス名:mc_03) レイヤー1:top_04.swfを読み込むMC(インスタンス名:mc_04) となっています。(※image2) ★質問 (1)top_01~04.swfの作成の仕方なのですが、レイヤーの順番や配置はもっと効率的な方法がありますか? (2)parent.swfでは、 onLoad = function(){ mc_01.loadMovie("top_01.swf"); mc_02.loadMovie("top_02.swf"); mc_03.loadMovie("top_03.swf"); mc_04.loadMovie("top_04.swf"); } このようなスクリプトしか書けていません。 今回作成したいのは、 1、top_01~04.swfがそれぞれ10フレーム程度の間隔でフェードイン 2、その後、top_01~04.swfが順番に等間隔でマスクによる画面遷移を繰り返す なのですが、1も2も、top_01~04.swf(子)で間隔を調整すると、ものすごいフレーム数になるうえ、だんだん間隔がずれてきてしまいます。 これを、なんとかparentで等間隔に制御する方法はありますか? 以上、わかりにくい質問で申し訳ないですが、よろしくお願いいたします。

  • 【急ぎ】setIntervalを使って各インスタンスごとに表示するタイミングを変える

    先ほどの書き込みと被ってしまいすみません。 現在、花火の「ナイアガラの滝」をFlashで表現しようとしています。 その際にトゥイーンではなくすべてASにて制御したいのです。 そして、時間差で画面の両端から真ん中に向かって花火がつくようにしたいと思っています。 現時点では、花火の火の粉を表すMCを作成してこのMCに対して以下のようなAS(指定位置から真下に落ちる)を記述しています。 ///////////////////////////////////////////////////// onClipEvent (enterFrame) { this._y = this._y+12; if (this._y>140) { this._y = 38.5; } } ////////////////////////////////////////////////////// このMCと同じ階層に上のMCを複製したものを数個配置しており、scriptレイヤーの1フレーム目には以下のようなASを記述しています。 ////////////////////////////////////////////////////// stop(); myID = setInterval(function () { gotoAndstop(2); clearInterval(myID); }, 3000); ////////////////////////////////////////////////////// はじめに説明した火の粉のMCは1つずつレイヤー分けして2フレーム目に配置しているので、上のASのままでは、全てが同時に再生されてしまい、花火のナイアガラっぽくありません。 より、リアルにする為に時間差で花火をつけたいです。 火の粉のMCにはa、b、c、dといった感じでインスタンス名をつけています。 1フレーム目に記述している「gotoAndstop(2);」をインスタンス名で指定すればいいのでは…と思い「gotoAndstop(a);」と、指定してみたのですが、何も表示されなくなってしまいます。 まだまだ、ASについて詳しくないので、分かり易く説明していただけると助かります。 急ぎなので、分かる方返信お願いします。 よろしくお願いします。

    • ベストアンサー
    • Flash
  • 【Fash actionscript】楕円を描画したい

    actionscriptで楕円を描画したいです。 円を描画するとこまでは、以下ページに説明があったので、 http://www.geocities.jp/swf_daisuke/school/class3.html できたのですが、応用ができなくて困ってます。 楕円といっても色々あるでしょうが、長方形が内接するような楕円です。 ご指導のほど、よろしくお願いいたします。

    • ベストアンサー
    • Flash
  • ActionscriptのBitmapDataの描画速度

    BitmapDataクラスを使って単色で塗りつぶしたのですが、 以下の二つの方法で試して速度を比較してみました。 1)各ピクセル毎にループさせて、setPixel(x, y, color)で各ピクセルを塗りつぶした。 2)fillRect(rect, color)で一気に塗りつぶした。 結果は、2)の方が断然速く処理しました。なぜ塗りの速度が全然違うのでしょうか?fillRectの中では何が行われているのでしょうか? ご教授願います。

    • ベストアンサー
    • 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
  • ipad用ペンシルについて。

    一番高いのが第二世代。その次が第一世代。 初めは描画目的なら第二や第一世代の1万数千から2万円近くするペンしかいけないと思っていましたが、必ずそうとも限らないようです。 https://item.rakuten.co.jp/niccou-store/yr-2020-pencil-p6/ https://item.rakuten.co.jp/applied2/4549995249989/?s-id=bk_pc_item_list_image_n ipadにするなら上記のサイトのもので9世代の安いもの。 一番上のがペンで9世代対応となっていた。 第一世代のペンが1万3千円から1万5千円。第二世代のペンが殆ど2万円。 ipad専用ペンでも3千円くらいで買えるのがあるのにこの第一世代とか第二世代のペンは何ですか? 描画目的ならやっぱり第一か第二世代のペンしか駄目ですか? 描画といっても私は趣味で下記の画像のような動物やサンタクロースのような簡単な人物、果物さえ描ければそれでいいです。その程度なら1番上のサイトペンでも大丈夫でしょうか?

  • AS2 attachMovie 外部画像対応に

    AS2 attachMovie 外部画像対応にしたい <やりたいこと> AS2 attachMovieを利用して、複数画像を読み込むサンプルがあるのですが、 これを外部画像読込対応に変更したいです。 <知りたいこと> AS2 attachMovieで、外部画像を読み込む簡単なサンプルコードを 作成していただけないでしょうか? あるいは、下記内容を、どう修正すればよいでしょうか? <現状> ・画像は「image_1」「image_2」「image_3」って感じで、ムービークリップにして、ライブラリへ入れてます。 ・ステージ上に画像は、配置せず、変わりに、ムービークリップのリンケージ識別子を、それぞれ「image_1」「image_2」「image_3」としています、また、「ASに書き出し」「最初のフレームに書き出し」にチェックを入れてます <現状のコード一部> next_bottun.onPress = function() { if (image_maisu>next_i) {//イメージ枚数より選択イメージが少なかったら next_i += 1;//選択イメージを加算 var mc_name = "image_"+next_i;//識別子の名前を変更して change_mc(mc_name, syoki_sokudo);//切り替わり関数に送る } }; function change_mc(mc_name, syoki_sokudo) { i++;//IDを加算して var new_name = "image_"+i;//インスタンス名を設定 var syoki = {_alpha:0, i:i, sokudo:syoki_sokudo};//初期値を設定 _root.main.attachMovie(mc_name, new_name, i, syoki);//mainの中に生成する

専門家に質問してみよう