今年の3月くらいからまったりと開発して来ました、お絵描きライブラリ。
とりあえず、それなりに動くようなりました。 そこで、こっそりとGoogle Codeにて公開してみました。
その名も、as3paintoco(ぺいんとこ)と言います。
機能
主に、以下のような機能を持っています。
- undo, redo機能
- replay機能
- お絵描きした画像の保存機能
使い方
as3paintoco(ぺいんとこ)はFlash Player10.0.32以降に対応しております。ただし、開発中ステータスのため予期しない動作をするかも知れません。その点ご了承下さい。
ライブラリの準備
- このライブラリは、as3corelibを使用しているので、as3corelib.swcをライブラリパスに通します。
- as3paintoco_alpha4.swcをダウンロードして、ライブラリパスに通します。
サンプルコード
コンテキストメニューからツールを選んで、キャンバスにお絵描きするサンプルです。 [swfobj src="http://asmple.com/as3paintoco/as3paintoco_work2.swf?v=1" width="465" height="465"]
package
{
import flash.display.Sprite;
import flash.events.ContextMenuEvent;
import flash.ui.ContextMenu;
import flash.ui.ContextMenuItem;
import jp.wxd.as3paintoco.AS3Paintoco;
import jp.wxd.as3paintoco.tools.CircleTool;
import jp.wxd.as3paintoco.tools.ITool;
import jp.wxd.as3paintoco.tools.LineTool;
import jp.wxd.as3paintoco.tools.PenTool;
import jp.wxd.as3paintoco.tools.SelectTool;
import jp.wxd.as3paintoco.tools.SquareTool;
import jp.wxd.as3paintoco.tools.TextTool;
/**
* as3Paintoco sampleコード2
* @author Copyright (C) naoto koshikawa, All Rights Reserved.
*/
public class PaintocoWork2 extends Sprite
{
//----------------------------------------------------------------------
// properties
//----------------------------------------------------------------------
//------------------------------
// private properties
//------------------------------
/**
* AS3Paintoco instance
*/
private var _paint:AS3Paintoco;
/**
* tools
*/
private var _tools:Object;
//----------------------------------------------------------------------
// methods
//----------------------------------------------------------------------
//------------------------------
// public methods
//------------------------------
/**
* constructor
*/
public function PaintocoWork2()
{
_tools = {
penTool: new PenTool(),
lineTool: new LineTool(),
squareTool: new SquareTool(),
circleTool: new CircleTool(),
textTool: new TextTool(),
selectTool: new SelectTool()
};
_tools.textTool.options = {
size:24
};
// AS3Paintocoのインスタンスを生成します。
_paint = new AS3Paintoco(this, 465, 465);
_paint.replayable = true;
initialize();
createMenu();
}
/**
* initialize
*/
private function initialize():void
{
_paint.initialize();
// 初期ツールを設定します。
_paint.applyTool(_tools.penTool);
// キャンバスをアクティブにしお絵描き可能にします。
_paint.activate();
}
/**
* create context menu
*/
private function createMenu():void
{
var contextMenu:ContextMenu = new ContextMenu();
contextMenu.hideBuiltInItems();
var penMenu:ContextMenuItem = new ContextMenuItem("penTool", true);
var lineMenu:ContextMenuItem = new ContextMenuItem("lineTool");
var squareMenu:ContextMenuItem = new ContextMenuItem("squareTool");
var circleMenu:ContextMenuItem = new ContextMenuItem("circleTool");
var textMenu:ContextMenuItem = new ContextMenuItem("textTool");
var selectMenu:ContextMenuItem = new ContextMenuItem("selectTool");
penMenu.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT,
contexToolMenu_menuSelect);
lineMenu.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT,
contexToolMenu_menuSelect);
squareMenu.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT,
contexToolMenu_menuSelect);
circleMenu.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT,
contexToolMenu_menuSelect);
textMenu.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT,
contexToolMenu_menuSelect);
selectMenu.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT,
contexToolMenu_menuSelect);
var clearMenu:ContextMenuItem = new ContextMenuItem("clearAction");
var undoMenu:ContextMenuItem = new ContextMenuItem("undoAction");
var redoMenu:ContextMenuItem = new ContextMenuItem("redoAction");
var replayMenu:ContextMenuItem = new ContextMenuItem("replayAction", true);
var saveMenu:ContextMenuItem = new ContextMenuItem("saveAction", true);
clearMenu.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT,
contexActionMenu_menuSelect);
undoMenu.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT,
contexActionMenu_menuSelect);
redoMenu.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT,
contexActionMenu_menuSelect);
replayMenu.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT,
contexActionMenu_menuSelect);
saveMenu.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT,
contexActionMenu_menuSelect);
contextMenu.customItems.push(clearMenu);
contextMenu.customItems.push(undoMenu);
contextMenu.customItems.push(redoMenu);
contextMenu.customItems.push(replayMenu);
contextMenu.customItems.push(penMenu);
contextMenu.customItems.push(lineMenu);
contextMenu.customItems.push(squareMenu);
contextMenu.customItems.push(circleMenu);
contextMenu.customItems.push(textMenu);
contextMenu.customItems.push(selectMenu);
contextMenu.customItems.push(saveMenu);
this.contextMenu = contextMenu;
}
//----------------------------------------------------------------------
// event listener
//----------------------------------------------------------------------
/**
* ContextMenuEvent.MENU_SELECT
* @param event
*/
private function contexToolMenu_menuSelect(event:ContextMenuEvent):void
{
var toolKey:String = ContextMenuItem(event.target).caption;
// 選択されたツールを適用します。
_paint.applyTool(_tools[toolKey]);
}
/**
* ContextMenuEvent.MENU_SELECT
* @param event
*/
private function contexActionMenu_menuSelect(event:ContextMenuEvent):void
{
var toolKey:String = ContextMenuItem(event.target).caption;
switch (toolKey)
{
case "clearAction":
// 初期化します。
initialize();
break;
case "undoAction":
// ワンストロークを取り消します。
_paint.undo();
break;
case "redoAction":
// ワンストロークをやり直します。
_paint.redo();
break;
case "replayAction":
// 最初からお絵描きを再生します。
_paint.replay(5.0);
break;
case "saveAction":
// お絵描きしたキャンバスをローカルファイルに保存します。
_paint.save("paint.png");
break;
}
}
}
}
その他のサンプル
as3paintoco(ぺいんとこ)を使って作成したお絵描きツールです。 現状は、UIを作成する手間がかかるので、今後、簡単に各種ツールボタンやオプション設定用のUIやスキンを作成することもぼんやりと考えております。
[swfobj src="http://asmple.com/as3paintoco/sample_simple1.swf?v=3" width="600" height="500"]
まとめ
というわけで、今回は簡単な紹介でした。今後も、お絵描きライブラリのas3paintoco(ぺいんとこ)は開発を進めながら追加機能などを紹介していきます。