Home > action script > 円弧の描画:タコメーターみたいな

円弧の描画:タコメーターみたいな

昨日のエントリのdrawCircle()メソッド界隈を調べていたら、Adobeサイト内に、円弧の描画のイケてるカスタムメソッドを見つけたので触ってみました。

見つけた記事は、だいぶ昔のもので、ActionScript1.0だったので、2.0に書き換え、外部ASファイルに書き直ました。以下がそのサンプルです。(要FlashPlayer8以上)

drawArc.swf

こういう円の描画アニメって、マスクとかトゥイーンでは結構作りにくい印象だったので、これを使えばだいぶ楽かも。外部ASファイルは以下のようにしました。

DrawArc.as

class DrawArc {
	var mc:MovieClip;
	function DrawArc(target:MovieClip) {
		mc = target;
	}
	function drawLine(x:Number, y:Number, radius:Number, arc:Number, startAngle:Number, thickness:Number, color:Number, alpha:Number, yRadius:Number) {
		mc.clear();
		mc.lineStyle(thickness, color, alpha, false, "none", "none");
		mc.moveTo(x, y);
		if (arguments.length<8) {
			return;
		}
		if (yRadius == undefined) {
			yRadius = radius;
		}
		if (Math.abs(arc)>360) {
			arc = 360;
		}
		var segs = Math.ceil(Math.abs(arc)/45);
		var segAngle = arc/segs;
		var theta = -(segAngle/180)*Math.PI;
		var angle = -(startAngle/180)*Math.PI;
		var ax = x-Math.cos(angle)*radius;
		var ay = y-Math.sin(angle)*yRadius;
		if (segs>0) {
			for (var i = 0; i<segs; i++) {
				angle += theta;
				var angleMid = angle-(theta/2);
				var bx = ax+Math.cos(angle)*radius;
				var by = ay+Math.sin(angle)*yRadius;
				var cx = ax+Math.cos(angleMid)*(radius/Math.cos(theta/2));
				var cy = ay+Math.sin(angleMid)*(yRadius/Math.cos(theta/2));
				mc.curveTo(cx, cy, bx, by);
			}
		}
	}
}

Flash8のlineStyle()はパラメータの種類が増えて、6番目の引数=線の端の処理(capsStyle)を"none"にすれば、今回のように角のある線が描画できます。

drawLineメソッドのパラメータですが、あれもこれも設定できた方がいいかもと思っていたら、めちゃ長くなりました。

  • x … 円描画の始点のx座標。
  • y … 円描画の始点のy座標。
  • radius … 円の半径
  • arc … 描画する弧の角度。負の数にすると逆方向(時計回り)にアニメーション。
  • startAngle … どの角度から円を書き始めるか。(0〜360)
  • thickness … 線の太さ。
  • color … 線の色。(例:0xff0000)
  • alpha … 線の透明度。
  • yRadius(オプション) … radiusに対し、y軸方向の径を設定できるので、楕円が描画できる。

という感じです。

で、flaファイルのフレームアクションに、

import DrawArc;
mc=new DrawArc(_root)
slider.changeHandler=change
function change(){
	mc.drawLine(175,65,60,slider.value,90,20,0x0C79C0,100)
	arc.text=Math.round(slider.value)
}
change()

スライダとの連携の都合で、ちょっと長くなっていますが、要は

//DrawArcクラスをインポートして
import DrawArc;
//引数に_rootを渡してできたクラスインスタンスの参照mcをつくります。
mc=new DrawArc(_root)

で、あとはchange関数を呼び出します。あるいはそのまま

mc.drawLine(175,65,60,slider.value,90,20,0x0C79C0,100)

と直接クラスインスタンスのメソッドを呼ぶだけです。

(今回は弧を表す第4引数arcにスライダバーの値である slider.value を割り当ててます。この値を変化させれば円弧アニメになります)

今回はスライダでいじれるようにしましたが、もちろんonEnterFrameで自動で描画できるので、ローディング中のアニメとかにも使えます。毎フレームで太さとか色とかを変化させていっても楽しいかも。

回転の方向とかがFlashの体系と逆だったりとかで気持ち悪いと思われるかもしれませんが、drawArcメソッドっていうのは他言語でもあるらしく、定形の仕様とかあったらややこしいので、できるだけ参考元のままにしておきました。

参考元; Macromedia - Developer Center : Advanced drawing methods in Macromedia Flash MX
(ActionScript1.0ですが、他にも興味深いメソッドがたくさんあります。)

10/17追記:「Reflektions miniml > draw arc v2」のブログで、コードは違えど、ほとんど同じようなサンプルを公開中。クラス化はされていないようです。でもこの方はv1, v2...と記事をバージョンアップされるので、次で負けてしまうでしょう。

Comment:2

ribo 2006-07-07 (金) 18:29

円弧を調べていて参考にさせていただきました。
無理やりですが、対象となるオブジェクトに対して_xscaleをマイナスにして反転させることで簡単に時計回りになりますよね。

tera 2006-07-10 (月) 10:10

コメントありがとうございます。
flaファイル側でdrawLineメソッドを呼び出す時に、
mc.drawLine(175,65,60,slider.-value,90,20,0x0C79C0,100)
と「-value」にしてやるのも、なかなか簡単です。

現状だと、基準点が描画開始位置になっているので、基準点が円の中心になるバージョンも用意しておくと便利そうですね。

Comment Form

コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。

Remember personal info

Trackback:0

TrackBack URL for this entry
http://www.trick7.com/blog/mt-tb.cgi/167
Listed below are links to weblogs that reference
円弧の描画:タコメーターみたいな from trick7.com blog

Home > action script > 円弧の描画:タコメーターみたいな

持っている Flash & ActionScript 関連本の中から、自分的おすすめの読む順番をご紹介。各書籍のレビューは books カテゴリからご覧頂けます。
この順番でどう?(AS3.0)
  • Adobe Flash CS3 詳細! ActionScript 3.0 入門ノート (DVD付)
    Adobe Flash CS3 詳細! ActionScript 3.0 入門ノート (DVD付)

    デザイン方面からFlashデビューして、そのままAS2.0を使うようになった人が、難しいと評判のAS3デビューする時の最初の1冊として、とにかく目を通しておくと良いかと思います。プログラミング経験の少ない方でも、サンプルをじっくり読めば、ゼロからのAS3デビュー可。
  • ActionScript 3.0 アニメーション
    ActionScript 3.0 アニメーション
    洋書「Making Things Move!」の日本語訳本。ActionScript3.0で数学的アニメーションを作ることがメインテーマなのですが、前半部分でAS3.0の基礎を分かり易く解説されています。後半の重力, IK, 3D表現等のアニメーション解説も楽しい。僕はこれのAS2.0洋書版を読んでFlashの面白さに気付きました。
  • Adobe Flash CS3 詳細! ActionScript3.0入門ノート2 (CD-ROM付)
    Adobe Flash CS3 詳細! ActionScript3.0入門ノート2 (CD-ROM付)
    この次の辞典のような洋書を読む前の事前知識としてこの本の内容を理解しておくといいかも。
  • Essential ActionScript 3.0 (Essential)
    Essential ActionScript 3.0 (Essential)

    900ページ以上ある相当分厚い本。基礎からOOPまでを解説。ほぼ網羅しているので、これを抑えておけばAS3博士になれそう。
  • Actionscript 3.0 Cookbook
    Actionscript 3.0 Cookbook

    ActionScript3.0のリファレンス本。問題とその解決法が1ページぐらいで細分化されているので空いた時間にちょっとずつ読み進められる。WebでAS3のソースを見て勉強する時の字引としても使う。ただ、時期的に初期の本なので、AS3自体が仕様変更してたりするので正誤表は必読。
  • Object-Oriented Actionscript 3.0
    Object-Oriented Actionscript 3.0

    7/23に発売されたFlash&OOP本。AS2.0版は持っているのだけど、オブジェクト指向の初歩的な解説から入って、後半は僕の理解を超える難度になっていきました。今度こそ理解できるか?
この順番でどう?(AS2.0)
  • Foundation Actionscript Animation: Making Things Move (Foundation)
    Foundation Actionscript Animation: Making Things Move (Foundation)

    スクリプトでアニメーションさせる方法を学べる。プログラムの知識というよりも数学や物理の知識が必要。バネの表現や3D表現など、汎用性の高いテクニックを身に付けられ、個人の表現力をレベルアップするのに最適。参考までに、僕が調べた英単語リスト。2007年4月に、AS3対応版も発売されました。
  • ゲーム開発のための数学・物理学入門 Beginning Math and Physics for Game Programmers
    ゲーム開発のための数学・物理学入門  Beginning Math and Physics for Game Programmers

    「Making Things Move!」の世界を突き詰めたい人用のステップアップのための本。行列や物理運動、2D/3D表現。Flashの本ではなく、じっくり読むタイプの本なので、あとまわしにしてもいいかも。
  • Flash 8 Essentials
    Flash 8 Essentials

    Flash8の新機能を紹介。全10章が独立した構成で、興味のある部分から読めます。フィルタやビットマップ、ビデオの使い方とかを、基礎から順を追って理解していけるので、ゼロからスクリプティングできるようになる。僕はビットマップ関連の作業の際のリファレンスとして常用しています。
  • .fla―Idea of Flash Creation
    .fla―Idea of Flash Creation

    上の本でFlash8の基本を身に付けて、それをどう面白い表現に落とし込むかを学べます。深津さんの、試行錯誤・実験しやすいスクリプティング、クラス設計に凄さを感じました。YouTubeやFlickrのAPI、PHPとの連携記事も。
  • FLASH ActionScript 2.0入門完全ガイド+実践サンプル集 [CD-ROM付]
    FLASH ActionScript 2.0入門完全ガイド+実践サンプル集 [CD-ROM付]

    ここまでで表現力が付き、テンションが上がるので、その勢いで難解なオブジェクト指向に挑戦。プログラム経験のない人がいきなり英語のOOP本を読むのは厳しい。この本で継承とかインターフェースとかポリモーフィズムとかの用語を理解しておくといいかも。
  • オブジェクト指向でなぜつくるのか―知っておきたいプログラミング、UML、設計の基礎知識―
    オブジェクト指向でなぜつくるのか―知っておきたいプログラミング、UML、設計の基礎知識―

    Flashの本ではありませんが、OOPの概念を気軽に読めるボリュームで解説してくれます。英語と日本語のOOP用語の対応を図るためにも「Object-oriented Actionscript for Flash 8」と併読するのがおすすめ。なんとなく読んでおくだけでも結構違うのでは。
  • Object-oriented Actionscript for Flash 8
    Object-oriented Actionscript for Flash 8

    前半はOOPの利便性や基本の紹介。デザインパターンやMVCの理解。13章からグッと難しくなって大変。Flash8対応。
  • Essential Actionscript 2.0
    Essential Actionscript 2.0

    上の本よりもさらにOOPプログラマ向け。同じOOP本ということでやや重複しており、こちらはMX2004時代の本なので見送ってもいいかも。分かりやすい英語で良著。この本のAS3版が出たら間違いなく買い。

Page Top