Home > action script > Flashで筆順再生のflaソース配布します

Flashで筆順再生のflaソース配布します

色と太さを設定できるようにして1週間ぐらい放置してしまったFlashで筆順再生ですが、ちょっと興味が他に移りつつあるので、とりあえずソースだけ公開しておきます。内容は前回のままです。

AM8:00にソースファイル更新。太いブラシ設定の部分の修正とデバッグ用の不要クラスのインポート指定をカットしました。

lineDraw2.zip(11KB): flash8形式

筆順再生部分をカットして、単純にペンツールとしての利用もできるかと思います。

ペンツールの部分は、キャンバス上でマウスダウンした時点で、ブラシの色と太さを配列に格納、onEnterFrameで座標を記録しつつlineToで線を描画。一筆上げるごとに、キャンバス上の絵をdrawし、ビットマップとして貼り付けるしくみになってます。何枚分か前のBitmapDataを置いておく&一筆分の配列を削除で、アンドゥも可能だし、attachBitmapされたビットマップに対しては消しゴムの実装もたぶんできます。

筆順再生は、お絵かき時に配列aに記録しておいたブラシ色&太さ&座標データをonEnterFrameで再現させているだけです。

コードは以下のスクリプトを_rootのフレームスクリプトに記述しているだけです。


import flash.display.BitmapData;
import flash.geom.Point;

var lineWidth:String = "N";//Bold,Normal,Small
var lineColor:Number = 0xff0000;
var a:Array = new Array();

bmpImage = new BitmapData(board._width, board._height, true, 0x000000);
bmpHolder = board.createEmptyMovieClip("bmpHolder", 10);
lineHolder = board.createEmptyMovieClip("lineHolder", 11);

replayBmpImage = new BitmapData(board._width, board._height, true, 0x000000);
replayBmpHolder = board.createEmptyMovieClip("replayBmpHolder", 4);
replayLineHolder = board.createEmptyMovieClip("replayLineHolder", 5);

board.onPress = function() {
    a.push(lineWidth+lineColor);//ex."B160025"
    lineHolder.lineStyle(brushSize(lineWidth), lineColor);
    lineHolder.moveTo(this._xmouse, this._ymouse);
    this.onMouseMove = drawLine;
};
board.onRelease = board.onReleaseOutside=function () {
    lineToBmp();
    lineHolder.clear();
    delete this.onMouseMove;
};
function drawLine() {
    var pt = new Point(this._xmouse, this._ymouse);
    board.lineHolder.lineTo(pt.x, pt.y);
    a.push(pt.x);
    a.push(pt.y);
}
function lineToBmp() {
    bmpImage.draw(lineHolder);
    bmpHolder.attachBitmap(bmpImage, 1);
}
function redrawPicture() {
    //first
    replayLineHolder.lineStyle(brushSize(a[0].charAt(0)), a[0].substr(1));
    a.shift();
    replayLineHolder.moveTo(a[0], a[1]);
    a.shift();
    a.shift();
    //second...
    this.onEnterFrame = function() {
        if (a.length != 0) {
            if (a[0].charAt(0) == "B" || a[0].charAt(0) == "N" || a[0].charAt(0) == "S") {
                replayBmpImage.draw(replayLineHolder);
                replayBmpHolder.attachBitmap(replayBmpImage, 1);
                replayLineHolder.clear();
                replayLineHolder.lineStyle(brushSize(a[0].charAt(0)), a[0].substr(1));
                a.shift();
                replayLineHolder.moveTo(a[0], a[1]);
            }
            replayLineHolder.lineTo(a[0], a[1]);
            a.shift();
            a.shift();
        } else {
            //finish
            replayBmpImage.draw(replayLineHolder);
            replayBmpHolder.attachBitmap(replayBmpImage, 1);
            replayLineHolder.clear();
            delete this.onEnterFrame;
        }
    };
}
//BTN-------------------------------
btn_play.onRelease = function() {
    bmpImage = new BitmapData(board._width, board._height, true, 0x000000);
    bmpHolder.attachBitmap(bmpImage, 1);
    redrawPicture();
};
btn_reset.onRelease = function() {
    bmpImage = new BitmapData(board._width, board._height, true, 0x000000);
    bmpHolder.attachBitmap(bmpImage, 1);
    replayBmpImage = new BitmapData(board._width, board._height, true, 0x000000);
    replayBmpHolder.attachBitmap(replayBmpImage, 1);
    a = new Array();
};
//BRUSH-----------------------------
//color
for (var i:Number = 1; i<=12; i++) {
    pallet["colorChip"+i].onRelease = function() {
        var col = new Color(this);
        lineColor = col.getRGB();
        this._parent.select._x = this._x;
        this._parent.select._y = this._y;
    };
}
//thickness
pallet.thick_B.onRelease = function() {
    lineWidth = "B";
    this._parent.selectBrush._x = this._x;
};
pallet.thick_N.onRelease = function() {
    lineWidth = "N";
    this._parent.selectBrush._x = this._x;
};
pallet.thick_S.onRelease = function() {
    lineWidth = "S";
    this._parent.selectBrush._x = this._x;
};
function brushSize(thick:String):Number {
    if (thick == "B") {
        return 10;
    } else if (thick == "N") {
        return 5;
    } else if (thick == "S") {
        return 2;
    }
}

もっと効率のいい&軽いコーディングを教えてやってもいいという方、コメントいただけると嬉しいです。最高に軽いペンツールってどういうやり方があるのでしょうか?

関連記事:
trick7.com blog: Flashで筆順再生
trick7.com blog: Flashで筆順再生2:色とブラシサイズ

Comment:0

Comment Form

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

Remember personal info

Trackback:0

TrackBack URL for this entry
http://www.trick7.com/blog/mt-tb.cgi/408
Listed below are links to weblogs that reference
Flashで筆順再生のflaソース配布します from trick7.com blog

Home > action script > Flashで筆順再生のflaソース配布します

持っている 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