flash編集知識必須(flaファイル付)のブログ記事

mod018 マウスで線を描画

|

2007.8.4公開

flashPlayer version7.0以降

マウスドラッグ中に線を描画します。
消去ボタンを押すと描画した線が消えます。

//パブリッシュをver7.0にしているのはgetNextHighestDepthを使用するため
//消去ボタンのインスタンス名はbutton
var lineT:Number = 9;//線の太さpt
var lineC:Number = 0x00ffff;//線の色
var lineA:Number =100;//線の透過度
var cliskS:Boolean = false;//クリック判定変数

//マウスイベント設定
var mouseL:Object = new Object();
Mouse.addListener(mouseL);

//線描画用の設定
_root.createEmptyMovieClip("draw_mc", _root.getNextHighestDepth());//ムービークリップ生成
draw_mc.lineStyle(lineT, lineC , lineA);//ラインスタイル設定

//消去ボタン押下時関数
button.onPress = function():Void{
clickS = false;
draw_mc.clear()
_root.createEmptyMovieClip("draw_mc", _root.getNextHighestDepth());//ムービークリップ生成
draw_mc.lineStyle(lineT, lineC , lineA);//ラインスタイル設定
}

//マウス押下時関数
mouseL.onMouseDown = function():Void{
draw_mc.moveTo(_root._xmouse, _root._ymouse);//線描画開始位置の座標設定
clickS = true;//マウス押下中
}

//マウス押下終了時関数
mouseL.onMouseUp = function():Void {
clickS = false;//マウス押下終了
}

_root.onEnterFrame = function():Void {
//マウス押下中は線を描画
if(clickS == true){
draw_mc.lineTo(_root._xmouse, _root._ymouse);
}
}

ダウンロード
サンプル

2007.8.3公開

flashPlayer version7.0以降

あらかじめ複数の点のx座標とy座標を指定すると、それらを順番に通るように線が描かれていきます。

//パブリッシュのverを7にしているのはgetNextHighestDepth()を使用するため
var lineT:Number = 9;//線の太さpt
var lineC:Number = 0xff66ff;//線の色
var lineA:Number =30;//線の透過度
var duration:Number = 30;//描画関数呼び出し間隔msec
var speedD:Number = 5;//描画関数呼び出し毎の線描画長px

//x座標とy座標設定 スタートの点を0番目とする
//0番目がx座標、1番目がy座標を意味する
//例:arrayXY[3][0] 三番目の点のx座標
var arrayXY:Array = [[150,5],[105,105],[5,105],[80,195],[65,295],[150,220],[235,295],[220,195],[295,105],[195,105],[150,5]];
var pointN:Number = arrayXY.length - 1;//線を引く際の目標点の数 スタートの点を除いた数とする
var drawC:Number;//描画長カウント用
var lineN:Number = 1;//現在何個目の点を目指しているカウントする
var nowX:Number = arrayXY[0][0];//現在のx座標
var nowY:Number = arrayXY[0][1];//現在のy座標
var tempX:Number;//x移動長計算用変数
var tempY:Number;//y移動長計算用変数
var tempP:Number;//xとyの長さの比率計算用変数
var tempM:Number;//目標点までの長さ計算用変数
//ライン描画用設定
_root.createEmptyMovieClip("draw_mc", _root.getNextHighestDepth());//ムービークリップ生成
draw_mc.lineStyle(lineT, lineC , lineA);//ラインスタイル設定
draw_mc.moveTo(nowX, nowY);//最初の座標へ移動

//ライン描画関数呼び出し設定
var intervalId:Number = setInterval(drawLine, duration);

//文字表示関数
function drawLine():Void{
drawC = speedD;

//今回の線の描画が終了していない間繰り返し
while(drawC > 0){
//現在描画している線のyとxの長さの比率を求める
tempP = (arrayXY[lineN][1] - arrayXY[lineN - 1][1]) / (arrayXY[lineN][0] - arrayXY[lineN - 1][0]);
tempP = Math.abs(tempP);//比率が負なら正に変える
tempX = drawC / Math.sqrt(1 + tempP * tempP);//tempPを元にxの移動長を計算
tempY = tempP * tempX;//tempPを元にyの移動長を計算
if(arrayXY[lineN][0] < arrayXY[lineN - 1][0] )tempX *= -1;//移動が負の方向の場合
if(arrayXY[lineN][1] < arrayXY[lineN - 1][1] )tempY *= -1;//移動が負の方向の場合

//次の目標点までの長さを計算
tempM = Math.sqrt((arrayXY[lineN][0] - nowX) * (arrayXY[lineN][0] - nowX) + (arrayXY[lineN][1] - nowY) * (arrayXY[lineN][1] - nowY));

//今回の移動では次の目標点に到達しないとき
if(Math.sqrt(tempX * tempX + tempY * tempY) < tempM){
nowX += tempX;//現在のx座標の変更
nowY += tempY;//現在のy座標の変更
draw_mc.lineTo(nowX, nowY);//線を引く
break;
}
else{//今回の移動で次の目標点に到達するとき
//今回の線の描画長から次の目標点までの長さをマイナスする
drawC -= tempM;
nowX = arrayXY[lineN][0];//現在のx座標の変更
nowY = arrayXY[lineN][1];//現在のy座標の変更
draw_mc.linetTo(nowX,nowY);//線を引く
lineN++;//目標点を進める
}
if(lineN > pointN){//描画完了
clearInterval(intervalId);//関数呼び出し消去
break;
}
}
}

ダウンロード
サンプル

2007.8.2公開

flashPlayer version6.0r65以降

決められた文字列を一文字ずつ一定間隔毎に表示します。


//textAは文字を表示するダイナミックテキストの変数
//disS:表示文字列
var disS:String = "青春Bのflash素材を、ぜひぜひ楽しんでご利用くださいね。 H/K 昨日、美味しいソフトクリームを食べました。";
var lineC:Number = 15;//一行あたりの文字数
var lengthS:Number = disS.length;//文字列長
var duration:Number = 100;//文字表示間隔
var charN:Number = 0;//文字数カウント用

//文字表示関数呼び出し設定
var intervalId:Number = setInterval(charLoad, duration);

//文字表示関数
function charLoad():Void{
textA += disS.charAt(charN++);//表示文字の追加
if(charN % lineC == 0)textA += '\n';//lineCの値毎に改行
if(charN > lengthS - 1) clearInterval(intervalId);//関数呼び出しクリア
}

ダウンロード
サンプル

mod015 画像の拡大表示

|

2007.7.31公開

flashPlayer version6.0r65以降

画像内のクリック中の地点を拡大表示していきます。
ダブルクリックした際に元のサイズに戻す仕様としています。

//imageIは画像のインスタンス名。基準点は左上
//ダブルクリック検出は配布中のmod003を使用
var scaleL:Number = 600;//画像拡大上限(%)
var scaleD:Number = 5;//画像拡大値(%)
var clickS:Boolean = false;//画像クリック中判定
var duration:Number = 200;//ダブルクリック時間定数
var countN:Number = 0;//ダブルクリック検出用時間格納

_root.onEnterFrame = function():Void {
//クリック中はスケール及び位置を変更
//画像の拡大とマウス位置を元にimageIの位置を決定
if(clickS==true){
if(imageI._xscale + scaleD < scaleL){
imageI._x -= imageI._xmouse * scaleD / 100;
imageI._y -= imageI._ymouse * scaleD / 100;
imageI._xscale += scaleD;
imageI._yscale += scaleD;
}
else{
imageI._x -= imageI._xmouse * (scaleL - imageI._xscale) / 100;
imageI._y -= imageI._ymouse * (scaleL - imageI._yscale) / 100;
imageI._xscale = imageI._yscale = scaleL;
}
}
}

//以下ボタンクリック判定
imageI.onPress = function():Void{
if(getTimer() - countN < duration){
//ダブルクリック時 スケールを0に戻す
imageI._xscale = imageI._yscale = 100;
imageI._x = imageI._y = 0;
}
else{
//クリック時
clickS = true;
}
//時間取得
countN = getTimer();
}

imageI.onRelease = function():Void{
clickS = false;
}

imageI.onDragOut = function():Void{
clickS = false;
}

ダウンロード
サンプル

flashPlayer version6.0r65以降

ダブルクリックを検出します。
ダブルクリック前の一回目のクリックは検知しません。
ただし、シングルクリック時の処理も一定時間待つことになってしまいます。

//ダイナミックテキストは結果表示のためのものでダブルクリックチェックとは無関係
//一定時間内のクリック回数を数え、その回数が一回か二回以上かで処理を分ける
//ダブルクリック時にシングルクリックを検出しない
//シングルクリック時の処理も一定時間以内は行われない
//duration:ダブルクリック時間定数 この値以内の二度目以降のクリックをダブルクリックとする
//clickN:クリック回数
//clickA:クリックを検出したいインスタンス名
//clickSD:インスタンスクリック時の呼び出し関数
//intervalId:setInterval用
//check:結果表示用ダイナミックテキストの変数
var duration:Number=200;
var clickN:Number=0;//クリック回数
clickA.onPress=clickSD;
var intervalId:Number;

//クリック処理関数
function clickSD2():Void{
if(clickN == 1){
//シングルクリック処理を書き込む
check = "シングルクリック";
}
else if(clickN > 1){
//ダブルクリック処理を書き込む
check = "ダブルクリック";
}
clearInterval(intervalId);//間隔をクリアする
clickN = 0;//クリック回数を0に戻す
}

//クリック時呼び出し関数
function clickSD():Void{
//durationにて設定した時間後にclickSD2関数呼び出し
if(clickN == 0)intervalId = setInterval(_root, "clickSD2", duration);
clickN++;//クリック回数を増やす
}

ダウンロード
サンプル

2007.7.14公開(2007.7.30コメント修正)

flashPlayer version6.0r65以降

ダブルクリックを検出します。
ただし、ダブルクリック前の一回目のクリックも検知してしまいます。

//ダイナミックテキストは結果表示のためのものでダブルクリックチェックとは無関係
//クリックする度そのときの時間をgetTimerで取得する。
//前回の取得時間と今回の取得時間の差でダブルクリックを判定する
//ダブルクリックを検知する前にシングルクリックも検知する
//duration:ダブルクリック時間定数 この値以内の二度目以降のクリックをダブルクリックとする
//clickA:クリックを検出したいインスタンス名
//countN:時間格納
//clickSD:インスタンスクリック時の呼び出し関数
//check:結果表示用ダイナミックテキストの変数
var duration:Number = 200;
var countN:Number = 0;
clickA.onPress = clickSD;

//クリック検知用の関数。
function clickSD():Void{
if(getTimer() - countN < duration){
//ダブルクリック処理を書き込む
check = "ダブルクリック";
}
else{
//シングルクリック処理を書き込む
check = "シングルクリック";
}
//時間取得
countN = getTimer();
}

ダウンロード
サンプル

2007.7.29公開

flashPlayer version6.0r65以降

mod009の改造版です。
ロードした外部画像を横一列に並べ、ボタンにてスクロールさせ、その際に画像に合わせた説明文を下部に表示しています。

ダウンロード
サンプル

2007.7.28公開(2007.8.4コード修正 2007.8.8コメント修正)

flashPlayer version6.0r65以降

mod010の改造版です。mod010は画像が正面を向いたままの円軌道でしたが、こちらは画像の向きも回転するタイプとなっています。
ロードした外部画像を円状に並べ、ボタンにて回転させます(数学的検証不足により、厳密な円軌道の期待はおやめください)。

画像にリンクを張ったバージョンもメニューとして公開中です。

ダウンロード
サンプル

2007.7.25公開

flashPlayer version6.0r65以降

ロードした外部画像を横一列に並べ、ボタンにてスクロールさせます。

ダウンロード
サンプル

2007.7.24公開

flashPlayer version8.0以降

ローカルの時間を取得して表示するアナログ時計です。
針や文字盤などの画像は外部より読み込んでいます。
針の位置を画像のサイズによって自動的に調節します。
ステージのサイズを変更してもActionScriptを変更する必要はありません。

ダウンロード
サンプル

前へ 1 2 3 4 次へ