カスタマイズ用部品(8-AS2.0)のブログ記事

ActionScriptの制御による文字列操作素材です。
定義した複数文字列を左端から順番に混ぜながら、最終的には目的の文字列を表示します。

//複数文字列を左端から順番に表示していく
//最終的には文字配列内の最終文字列を表示する
//text_dtはステージ上ダイナミックテキストインスタンス
//コメントの文字番号とは表示文字列の何文字目かを指す0基点の数値

var DURATION_NUM:Number = 70;//文字シャッフル関数呼び出し間隔(msec)
var intervalId:Number;//setInterval 関数用識別変数

//表示文字配列
//最終要素が最終的に表示される文字列となる
//文字数はすべて統一すること
var STR_ARR:Array = new Array(
"あいうえおあいうえおあいうえおあいうえおあいうえおあいうえお■■",
"かきくけこかきくけこかきくけこかきくけこかきくけこかきくけこ☆☆",
"さしすせそさしすせそさしすせそさしすせそさしすせそさしすせそ○○",
"たちつてとたちつてとたちつてとたちつてとたちつてとたちつてと★★",
"なにぬねのなにぬねのなにぬねのなにぬねのなにぬねのなにぬねの■■",
"はひふへほはひふへほはひふへほはひふへほはひふへほはひふへほ☆☆",
"まみむめもまみむめもまみむめもまみむめもまみむめもまみむめも○○",
"らりるれろらりるれろらりるれろらりるれろらりるれろらりるれろ★★",
"青春Bはいつだってクリエイティブに! もっとクリエイティブに!!");

var ARR_NUM:Number = STR_ARR.length - 1;//文字列数 0基点
var STR_NUM:Number = STR_ARR[ARR_NUM].length - 1;//文字数 0基点
var cnt_num:Number = 0;//シャッフル関数呼び出し回数

//文字シャッフル関数設定
intervalId= setInterval(_root, "textChange", DURATION_NUM);

function textChange():Void{
cnt_num++;//関数呼び出し回数インクリメント
var i:Number = cnt_num - ARR_NUM;//シャッフル終了とならない最小文字番号
if(i < 0)i = 0;
var j:Number = cnt_num;//表示対象の最大文字番号+1
if(cnt_num > STR_NUM)j = STR_NUM + 1;

var k:Number = 0;
var str:String = "";

//文字列生成
while(k < j){
//シャッフル終了となるかどうかで分岐
if(k < i) str += STR_ARR[ARR_NUM].charAt(k);
else str += STR_ARR[cnt_num - k - 1].charAt(k);
k++;
}
text_dt.text = str;
if(cnt_num > STR_NUM + ARR_NUM)clearInterval( intervalId );//関呼び出し終了
}

ダウンロード
サンプル

2008.1.14公開

flashPlayer version6.0r65以降

ActionScriptの制御によって画像の拡大と縮小を繰り返します。
画像は徐々に拡大と縮小の度合いを小さくしながら、最終的には等倍にて静止します。

//text_mcは拡大縮小するインスタンス名
var max_scale:Number = 1.1;//最大時スケール
//最大時スケールが3倍の場合は最小時は1/3とする

var repeat_num:Number = 6;//拡大縮小繰り返し数
var duration_num:Number = 10;//画像サイズ変更処理呼び出し間隔(msec)
var next_scale:Number;//次の目標スケール(%)
var now_num:Number;//現在が何回目の繰り返しか
var scale_duration:Number = 3;//何パーセントずつ増減させるか

var intervalId:Number;//setInterval 関数用識別変数

//インスタンスクリック時関数
text_mc.onPress = function():Void{
//前回のインターバル関数設定をクリア
if( intervalId != null)clearInterval( intervalId);
now_num = 0;//繰り返し回数を0に
//次の目標値計算
next_scale = 100 / max_scale + (100 - 100 / max_scale) * (now_num / repeat_num);
intervalId= setInterval(_root, "scaleC", duration_num);
}

//サイズ変更用関数
function scaleC():Void{
if(next_scale < 100){//縮小中
if(text_mc._xscale < next_scale + scale_duration){//縮小終了
text_mc._xscale = text_mc._yscale = next_scale;

//次の目標スケールを取得
next_scale = 100 * max_scale - (100 * max_scale - 100 ) * (now_num / repeat_num);
return;
}
text_mc._xscale -= scale_duration;
text_mc._yscale = text_mc._xscale;
}
else if(next_scale > 100){//拡大中
if(text_mc._xscale > next_scale - scale_duration){//縮小終了
text_mc._xscale = text_mc._yscale = next_scale;

//次の目標スケールを取得
next_scale = 100 / max_scale + (100 - 100 / max_scale) * (now_num / repeat_num);

now_num++;//繰り返し回数増加
return;
}
text_mc._xscale += scale_duration;
text_mc._yscale = text_mc._xscale;
}
else{//拡大縮小終了
text_mc._xscale = text_mc._yscale = 100;
clearInterval( intervalId );//関数繰り返し終了
intervalID = null;
}
}

ダウンロード
サンプル

2007.8.4公開

flashPlayer version6.0r65以降

オリジナルのノブやバーの画像を使用したスクロールバーです。
ノブのドラッグ,バーと左右矢印のクリックで操作します。

//ノブ(つまみ)のインスタンス名:dragN
//バーのインスタンス名:lineB
//左側矢印のインスタンス名:buttonL
//右側矢印のインスタンス名:buttonR
//現在の値を表示するダイナミックテキストの変数名:textA
var leftX:Number = lineB._x;//ノブの最左端
var rightX:Number = lineB._x + lineB._width - dragN._width;//ノブの最右端
var minN:Number = 0;//スクロールバーにて操作する数値の最小値
var maxN:Number= 100;//スクロールバーにて操作する数値の最大値
var cliskS:Boolean = false;//クリック判定変数
var dragS:Boolean = false;//ノブのクリック判定用
var buttonLS:Boolean = false;//左側矢印クリック判定用
var buttonRS:Boolean = false;//右側矢印クリック判定用
var moveX:Number = 1;//両側矢印押下時のx座標移動長
textA = 0;

//ノブ移動及び数値表示
//受け取った数値を元にバーの位置と表示する数値を変更する
function moveN(num:Number):Void{
//ノブ移動
if(num < leftX)dragN._x = leftX;
else if(num > rightX)dragN._x = rightX;
else dragN._x = num;

//数値変更 整数値にするため四捨五入
//得た値を実数のまま使用したければ四捨五入は不要
textA = Math.round((maxN - minN) * (dragN._x - leftX ) / (rightX - leftX) + minN);
}

//ノブクリック時処理
dragN.onPress = function():Void{
dragS = true;
}
dragN.onRelease = function():Void{
dragS = false;
}
dragN.onReleaseOutside = function():Void{
dragS = false;
}

//左側ボタンクリック時処理
buttonL.onPress = function():Void{
buttonLS = true;
}
buttonL.onRelease = function():Void{
buttonLS = false;
}
buttonL.onDragOut = function():Void{
buttonLS = false;
}

//右側ボタンクリック時処理
buttonR.onPress = function():Void{
buttonRS = true;
}
buttonR.onRelease = function():Void{
buttonRS = false;
}
buttonR.onDragOut = function():Void{
buttonRS = false;
}

//バークリック時処理
lineB.onPress = function():Void{
moveN(_root._xmouse);//ノブ移動及び数値表示関数呼び出し
}

_root.onEnterFrame = function():Void {
//ドラッグ中のインスタンスによって処理切り替え
if(dragS == true){//ノブドラッグ時
//マウスのx座標を引数としてノブ移動及び数値表示関数呼び出し
moveN(_root._xmouse);
}
else if(buttonLS == true){//左矢印ドラッグ時
//現在のノブのx座標-移動長を引数としてノブ移動及び数値表示関数呼び出し
moveN(dragN._x - moveX);
}
else if(buttonRS == true){//右矢印ドラッグ時
//現在のノブのx座標+移動長を引数としてノブ移動及び数値表示関数呼び出し
moveN(dragN._x + moveX);
}
}

ダウンロード
サンプル

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();
}

ダウンロード
サンプル

mod007 文字の透過

|

2007.7.21公開

flashPlayer version8.0以降

画像化していない純粋な文字を透過させます。
フィルタの適用によるビットマップ化で行っています。
フォントの埋め込みは使っていません。

//myDropFilter:ドロップシャドウフィルタ
//textA:透過するダイナミックテキストを乗せているムービークリップインスタンス
//textI:透過率を入力するためのTextInputコンポーネント
//TextInputは透過率を指定するための一例
//TextInputでなくとも、数値が指定できれば透過する

//ドロップシャドウフィルタの生成
//適用が影響を及ぼさないようにパラメータ設定
var myDropFilter = new flash.filters.DropShadowFilter(0,0,0xffffff,0);

//textAに生成したドロップシャドウフィルタを適用
//フィルタを適用することでビットマップ化し透過が反映されるようにする
//一度現在のフィルタを取得してから適用
var myFilter:Array = textA.filters;
myFilter.push(myDropFilter);
textA.filters = myFilter;

//textInputの入力内容が変わった際のイベント取得を定義
var listenerObject:Object = new Object();
textI.addEventListener("change", listenerObject)

//textInputの入力内容が変わった際のイベントを取得
listenerObject.change=function(eventObject:Object){
//透過率の変更
textA._alpha = parseInt(textI.text);
}

ダウンロード
サンプル

2 次へ