スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

--.--.-- | | スポンサー広告

Flash CS3でラバーバンド

以前エントリしたラバーバンドを描くと同様のものをFlash CS3で作りなおしてみました。





やってること自体は以前のエントリのものと同じデス。ステージをクリックするとラバーバンドがあらわれて、もう一度クリックするとソレが実線になってそこからまたラバーバンドです。

今回は、ラバーバンドを描画する部分をクラスにしてみることにしました。ソースコードはこんなカンジです。

package {
import flash.display.*;
import flash.events.*;
/**
* ラバーバンド描画クラス。
*/
public class RubberBand extends Sprite {
/** 開始x座標 */
private var _startX:Number;
/** 開始y座標 */
private var _startY:Number;
/** 終了x座標 */
private var _endX:Number;
/** 終了y座標 */
private var _endY:Number;
/** 線分の長さ */
private var _dash1:Number;
/** 間隔の長さ */
private var _dash2:Number;
/** 開始オフセット */
private var _offset:Number;
/** 線の太さ */
private var _lineWidth:Number;
/** 線の色 */
private var _lineColor:uint;
/** 線の透過度 */
private var _lineAlpha:Number;
/**
* コンストラクタ
*/
public function RubberBand(startX:Number = 0,
startY:Number = 0,
endX:Number = 0,
endY:Number = 0,
dash1:Number = 3,
dash2:Number = 4,
lineWidth:Number = 1,
lineColor:uint = 0x000000,
lineAlpha:Number = 1.0) {
_startX = startX;
_startY = startY;
_endX = endX;
_endY = endY;
_dash1 = dash1;
_dash2 = dash2;
_lineWidth = lineWidth;
_lineColor = lineColor;
_lineAlpha = lineAlpha;
_offset = 0;
// マウスイベントは受け取らない
mouseEnabled = false;
// フレームイベントハンドラを登録
addEventListener(Event.ENTER_FRAME, onEnterFrame);
}
/**
* 開始座標を設定します。
* @param x 開始x座標
* @param y 開始y座標
*/
public function setStart(x:Number, y:Number):void {
_startX = x;
_startY = y;
}
/**
* 開始x座標を戻します。
* @return 開始x座標
*/
public function get startX():Number {
return _startX;
}
/**
* 開始y座標を戻します。
* @return 開始y座標
*/
public function get startY():Number {
return _startY;
}
/**
* 終了座標を設定します。
* @param x 終了x座標
* @param y 終了y座標
*/
public function setEnd(x:Number, y:Number):void {
_endX = x;
_endY = y;
}
/**
* 線の色を設定します。
* @param color 線の色
*/
public function set lineColor(color:uint):void {
_lineColor = color;
}
/**
* 線の色を戻します。
* @return 線の色
*/
public function get lineColor():uint {
return _lineColor;
}
/**
* フレームイベントハンドラ。
* @param evt イベントオブジェクト
*/
public function onEnterFrame(evt:Event):void {
var g:Graphics = this.graphics;
// クリア
g.clear();
// 線スタイルの設定
g.lineStyle(_lineWidth,
_lineColor,
_lineAlpha,
true,
LineScaleMode.NORMAL,
CapsStyle.ROUND,
JointStyle.MITER,
1);
// 破線描画
var l:Number = Math.sqrt((_endX - _startX)
* (_endX - _startX)
+ (_endY - _startY)
* (_endY - _startY));
if (l < 2) {
return;
}
var sin:Number = (_endY - _startY) / l;
var cos:Number = (_endX - _startX) / l;
var d:Number = _offset;
var px:Number = cos * _offset;
var py:Number = sin * _offset;
while (d <= l) {
g.moveTo(px, py);
g.lineTo(px + cos * _dash1, py + sin * _dash1);
px += cos * (_dash1 + _dash2);
py += sin * (_dash1 + _dash2);
d += _dash1 + _dash2;
}
_offset = (_offset + 1) % (_dash1 + _dash2);
x = _startX;
y = _startY;
}
}
}
RubberBandクラスはSpriteを継承したクラスで、newしてaddChildして使うことを想定してマス。コンストラクタでは、開始点/終了点/破線の長さ/間隔の長さ/線の太さ/線の色/線の透過度を指定できます。

Event.ENTER_FRAMEイベントで、破線を描画します。破線を描画するロジックは以前のエントリと同様のものデス。また、開始点がこのオブジェクトのx, y座標になります。

アクセッサやら座標を設定するメソッドはサンプルで使用するもののみ記述してマス。

そんで、フレームアクションの方はこんなカンジです。
// ラバーバンド
var band:RubberBand
= new RubberBand(mouseX,
mouseY,
mouseX,
mouseY,
3,
4,
1,
Math.floor(Math.random() * 0x1000000));
band.addEventListener(Event.ENTER_FRAME,
function(e:Event) {
e.target.setEnd(mouseX, mouseY);
});
addChild(band);
band.visible = false;
// クリックイベント処理
stage.addEventListener(MouseEvent.CLICK,
function() {
// ラバーバンド描画中にクリックしたら線を確定
if (band.visible) {
var line:Sprite = new Sprite();
var g:Graphics = line.graphics;
g.lineStyle(1,
band.lineColor,
1.0,
true,
LineScaleMode.NONE,
CapsStyle.ROUND,
JointStyle.MITER,
1);
g.moveTo(0, 0);
g.lineTo(mouseX - band.startX, mouseY - band.startY);
line.x = band.startX;
line.y = band.startY;
line.mouseEnabled = false;
addChild(line);
} else {
band.visible = true;
}
// ラバーバンド開始点を設定
band.setStart(mouseX, mouseY);
// ラバーバンドの色を設定
band.lineColor = Math.floor(Math.random() * 0x1000000);
});
サンプルではRubberBandクラスのインスタンスは一つだけ作って、ソレを使いまわしています。

クリックイベントで実線を書いて、ラバーバンドの開始点をマウスの位置に再設定というカンジです。
スポンサーサイト

テーマ:Flash - ジャンル:コンピュータ

2007.08.09 | | Comments(0) | Trackback(0) | Flash CS3

コメント

コメントの投稿


秘密にする

«  | HOME |  »

プロフィール

HundredthMonkey

Author:HundredthMonkey
プログラマ。

ブロとも申請フォーム

この人とブロともになる

メールフォーム

名前:
メール:
件名:
本文:

ブログ内検索


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。