ActionScript 3.0でお絵かきアプリ – Flash/ActionScript入門
2008 年 12 月 16 日 投稿者: naga3
今回はActionScript 3.0でお絵かきアプリを作ってみましょう。こういう対話的なビジュアルアプリを簡単に作成できるのがFlashの良いところですね。実際の実行画面を以下に示しますのでマウスでお絵かきしてみてください(Flash Player 9.0以上が必要です)。
プロジェクトの作成と実行
FlashDevelopを起動して、「New Project...」を選択、テンプレートは「AS3 Project」を選び、「Name」の欄に「paint」と入力し、Locationは適当なフォルダを選んでOKを押します。
右側のProjectウインドウの「src」→「Main.as」をダブルクリックしてソースを表示し、以下のように書き換えてください。
- package {
- import flash.display.Sprite;
- import flash.events.MouseEvent;
- public class Main extends Sprite {
- private var mf:Boolean = false;
- public function Main():void {
- graphics.lineStyle(5, 0x00aa00);
- stage.addEventListener(MouseEvent.MOUSE_DOWN, function(e:MouseEvent):void {
- graphics.moveTo(mouseX, mouseY);
- mf = true;
- });
- stage.addEventListener(MouseEvent.MOUSE_UP, function(e:MouseEvent):void {
- mf = false;
- });
- stage.addEventListener(MouseEvent.MOUSE_MOVE, function(e:MouseEvent):void {
- if (mf) graphics.lineTo(mouseX, mouseY);
- });
- }
- }
- }
F5(Test Movie)を押すとお絵かきアプリが起動します。
ソースの解説
- import flash.display.Sprite;
- import flash.events.MouseEvent;
flash.displayパッケージの「Sprite」クラスと、flash.eventsパッケージの「MouseEvent」クラスをインポートしています。MouseEventクラスはマウスが押された・離された・動いたなどのアクションをイベントという概念で管理するクラスです。Javaをやっている人にはお馴染みですね。
- private var mf:Boolean = false;
mfはマウスの押下状態を表わす変数です。左ボタンが押されるとtrueになります。
- stage.addEventListener(MouseEvent.MOUSE_DOWN, function(e:MouseEvent):void {
- graphics.moveTo(mouseX, mouseY);
- mf = true;
- });
画面全体を表すオブジェクトであるstageに対して、マウスボタン押下時のイベントを割り当てています。第2引数で押下時のアクションを関数で指定するのですが、無名関数で書いていますので少し分かりにくいですね。関数を分離した場合は以下のようになります。
- stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
- function onMouseDown(e:MouseEvent):void {
- graphics.moveTo(mouseX, mouseY);
- mf = true;
- }
moveToはポインタの座標を移動するメソッド、lineToは移動した座標から線を引くメソッドです。引数で指定した座標 (mouseX, mouseY) はそれぞれマウスのX, Y座標となります。
以上、とてもシンプルなソースでお絵かきアプリを作ることができました。
ちなみに、以前のActionScriptでは更にシンプルなプログラムになります。
- mf = false;
- lineStyle(5, 0x00aa00);
- onMouseDown = function() {
- moveTo(_xmouse, _ymouse);
- mf = true;
- }
- onMouseMove = function() {
- if (mf) lineTo(_xmouse, _ymouse);
- }
- onMouseUp = function() {
- mf = false;
- }
ActionScript 3.0 に比べると短いのですが、バグが入り込みやすいかも知れません。
