HOME > FlashTips


Flash便利関数
便利かどうかはわかりませんが、ゲーム中で使われているfunctionなどを紹介します。
複数のfunctionがあるscriptは全てのfunctionをflashに書き込まないと動作しません。
勝手にコピーして使ってください。

※あくまで個人レベルで製作していますので、何らかのバグがある可能性があります。
使用する場合、サンプルを見る場合は全て自己責任の下でで行ってください。


感想、リクエスト等があれば掲示板


■0 プリローダー

 ◇0.0…NowLoadingが表示されるまでの空白を短くする。

■1 文字列操作

 ◇1.0…入力テキストの不要なスペースの削除
 ◇1.0a…入力テキストの前後の特定の文字を消去
 ◇1.1…有効数字の指定
 ◇1.1a…小数点以下の桁数の指定
 ◇1.2…指定された文字幅ごとに改行を挿入

■2 数値処理、演算操作


 ◇2.0…3つ以上の数の最大値、最小値を求める関数
 ◇2.1…最強眼力における敵の出現数の割り振り方
 ◇2.2…符号関数

■z その他

 ◇z.0…attachSoundが面倒くさいとき



■0 プリローダー

◇0.0 NowLoadingが表示されるまでの空白を短くする。

リンケイジを使って読み込むサウンドやMC類は「最初のフレームに書き出し」というチェックをはずしておきます。
このままだとロードされないので、それらのシンボルを詰め込んだMCを最初の適当なフレームXにおいておきます。
あとはX以前にNowLoadingを作り、X以降のフレームでattachSoundやattachMovieを使えばOKです。

特にLinkageをつけたサウンドやMCが多い時には有効です。

▲ページTOP▲


■1 文字列操作


◇1.0 入力テキストの不要なスペースの削除

ゲームのハイスコアを送信する時に名前を"    aaaaaa    "などと入れられるとムカつきますね。そのときの解決策がこちら。これで名前の前後に入っている不要なスペースが取り除かれます。勿論、"aa         aa"などという入力に対しては無力です。

function del_space(str) {
var str2 = str;
while (str2.charAt(0) == " " || str2.charAt(0) == " ") {
str2 = str2.slice(1, str2.length);
}
while (str2.charAt(str2.length-1) == " " || str2.charAt(str2.length-1) == " ") {
str2 = str2.slice(0, str2.length-1);
}
return str2;
}


####使用法####
del_space(文字列)

####戻り値####
文字列

テキストフィールドの文字列にdel_spaceを適応して、
同じテキストフィールドに出力されます。
◎sample◎


▲ページTOP▲


◇1.0a 入力テキストの前後の特定の文字を消去

1.0の応用編です。全角スペース、半角スペースに限らず、消去できる文字列を自分で指定します。strに変換したい文字列を指定し、delStrArrayに消去する必要のある文字を配列で指定します。勿論、文字列の最初と最後にある場合にしか削除されません。

function del_space(str, delStrArray) {
var str2 = String(str);
while (del_space2_(str2, delStrArray, 0)) {
str2 = str2.slice(1, str2.length);
}
while (del_space2_(str2, delStrArray, str2.length-1)) {
str2 = str2.slice(0, str2.length-1);
}
return str2;
}
function del_space2_(str2_, delStrArrays, be) {
var bl;
for (var i = 0; i<delStrArrays.length; i++) {
bl += str2_.charAt(be) == delStrArrays[i];
}
return bl>0;
}


####使用法####
del_space(文字列, 配列)
配列には["削除したい文字","削除したい文字"....]
のように入力します。

####戻り値####
文字列

ボタンを押すと
s = del_space2(s, ["$", "#","&","*"]);
が実行されます。
つまり、$, #, &, *の四字が削除対象の文字です。
◎sample◎


▲ページTOP▲


◇1.1 有効数字の桁数の指定

ハイスコアランキングで小数の記録と整数の記録が並んでいると変ですよねえ。そこで、この関数を使えば整数の記録もバッチリ小数の記録にしてくれます。整数値に.00とか追加してくれるスグレモノです。

function si_value(num, di, s) {
var num0 = String(num);
var ke = num0.split(".");
var d_ar = digs(num0);
if (Math.floor(num) == 0) {
var c = 1;
while (String(ke[1]).charAt(c-1) == 0) {
c++;
}
}
num0 *= Math.pow(10, di-d_ar[0]+c);
if (s == 2) {
num0 = Math.ceil(num0);
} else if (s == 1) {
num0 = Math.floor(num0+0.5);
}
trace(num0);
num0 = Math.floor(num0);
trace(num0);
num0 *= Math.pow(10, d_ar[0]-di-c);
trace(num0);
if (ke[0] != 0) {
while (digs(num0)[2]<di) {
ke[1] = String(ke[1])+"0";
num0 = ke.join(".");
}
} else {
while (digs(num0)[1]-c+1<di) {
ke[1] = String(ke[1])+"0";
num0 = ke.join(".");
}
}
return num0;
}
//
function digs(num) {
var num0 = String(num);
var ke = num0.split(".");
var i_digit = ke[0].length;
var s_digit = Number(ke[1].length);
var t_digit = i_digit+s_digit;
return [i_digit, s_digit, t_digit];
}


####使用法####
si_value(数値1, 数値2, 数値3)

数値1:指定した有効数字に変更したい数値
数値2:有効数字桁数
数値3:有効数字以下の数値の取り扱い
0:切捨て 1:四捨五入 2:切り上げ

####戻り値####
文字列

si_value(num, di, s)のnumに数字、diに桁数を入れます。
有効数字以下の数値はsによって
s=0:切捨て,s=1:四捨五入,s=2切り上げ
のようになります。
◎sample◎


▲ページTOP▲


◇1.1a 小数点以下の桁数を指定

1.1よりもちょっと簡単なバージョンです。記録をタイムでとる時には19.00秒などと表示したくても勝手に19秒になってしまいますね。それでお困りのアナタにオススメのscriptです。

function s_dig(num, di, s) {
var num0 = Number(num*Math.pow(10, di));
if (Math.floor(num0) != Number(num0)) {
num0 += Number([0, 0.5, 1][s]);
}
String(num0).indexOf(".") != -1 ? num0=Math.floor(num0) : 0;
var n0 = String(num0).slice(0, num0.length-di);
var n1 = String(num0).slice(num0.length-di);
if (n0 == "") {
n0 = "0";
}
while (n1.length<di) {
n1 = "0"+n1;
}
if (n1 == "") {
return n0;
} else {
return n0+"."+n1;
}
}

####使用法####
s_dig(数値1, 数値2, 数値3)

数値1:指定した有効数字に変更したい数値
数値2:小数点以下の桁数、1以上の整数
数値3:有効数字以下の数値の取り扱い
0:切捨て 1:四捨五入 2:切り上げ

####戻り値####
文字列

s_dig(num, di, s)のnumに数字、diに桁数を入れます。
有効数字以下の数値はsによって
s=0:切捨て,s=1:四捨五入,s=2切り上げ
のようになります。
◎sample◎


▲ページTOP▲


◇1.2 指定された文字幅ごとに改行を挿入

ダイナミックテキストに長い文字列を表示したときに、文字が何処で開業されるのかは非常にわかりにくいものです。しかし、この関数を使えば、指定した文字幅ごとに改行を挿入してくれるので、とても楽チンです。flashの掲示板やチャットを作るときに便利です。
※注:MX以前のバージョンでは使えません。

function text_add_newline(texts, wid0, theTextFormat, option) {
var tex0 = theTextFormat;
var wid = wid0-theTextFormat.size/2*option;
var ex, ret, k, k2, text_num;
var i = 0;
var texts2 = texts;
ex = tex0.getTextExtent(texts2);
k = [];
tex_num = Math.ceil(texts2.length/(ex.width/wid));
while (texts2.length != 0) {
if (tex0.getTextExtent(texts2).width<wid) {
k.unshift(texts2);
break;
}
k.unshift(texts2.substring(0, tex_num));
k2 = tex0.getTextExtent(k[0]).width;
if (k2>=wid) {
while (tex0.getTextExtent(k[0]).width>=wid) {
--tex_num;
k[0] = texts2.substring(0, tex_num);
}
} else {
while (tex0.getTextExtent(k[0]).width<wid && tex_num<texts2.length) {
tex_num++;
k[0] = texts2.substring(0, tex_num);
}
tex_num--;
}
k[0] = texts2.substr(0, tex_num);
texts2 = texts2.substr(tex_num, texts2.length-1);
i++;
}
k.reverse();
var k = k.join("\r");
return k;
}

####使用法####
text_add_newline(文字列 ,数値1 , textFormatオブジェクト, 数値2)

文字列:改行を加えたい文字列
数値1:この幅ごとに改行を加える。
textFormatオブジェクト:文字幅算出の際に適応されるtextFormatオブジェクト。
数値2:拡張機能。文字幅算出のずれを補正。1が最適

※引数のデータ型を指定された以外のものにすると無限ループに陥る可能性がありますので使用の際は気をつけてください。

####戻り値####
文字列

サンプルswf

▲ページTOP▲


■2 数値処理、演算操作

◇2.0…3つ以上の数の最大値、最小値を求める関数

Math.maxやMath.minでは二つの数しか比較できません。そこでこの関数を使えばいくつでも比較して最大最小を教えてくれます。まあ、基本がわかっていれば簡単に作れる関数です。スクリプト初心者の練習問題には良いかも。

function max_(n) {
var mx = n[0];
for (var i=1; i<n.length; i++) {
mx = Math.max(mx, n[i]);
}
return mx;
}

function min_(n) {
var mn = n[0];
for (var i=1; i<n.length; i++) {
mn = Math.min(mn, n[i]);
}
return mn;
}

####使用法####
max_([数値1, 数値2, 数値3,......])
min_([数値1, 数値2, 数値3,......])

上記のように比較したい数値の配列を引数にします。

####戻り値####
数値

▲ページTOP▲


 ◇2.1…最強眼力における敵の出現数の割り振り方

最強眼力では、敵の出現数を上手く割り振らないと、下手をすれば三色とも同数などというマヌケなことになってしまいます。そうならないためにはこのような仕組みを使います。

function colors(mxNum, ds) {
do {
var d = new Array();
for (var i = 0; i<mxNum; i++) {
var c = Math.floor(Math.random()*ds);
d[c]++;
}
} while (!nms(d));
return d;
}
//
function nms(d0) {
var d_mx = max_(d0);
var p = 0;
for (var j = 0; j<d0.length; j++) {
p += d_mx == d0[j];
}
return p == 1;
}
//
function max_(n) {
var mx = n[0];
for (var i = 1; i<n.length; i++) {
mx = Math.max(mx, n[i]);
}
return mx;
}

####使用法####
colors(数値1,数値2)

数値1の数を数値2に分配します。
colors(10,4)のようにすると、4成分からなる配列で、各成分の和が10になるような配列を返します。
ex. colors(10,4) -> [3,4,1,2]
このときに成分の値の最大値は唯一つになります。また0の成分はnull値を返します。

####戻り値####
配列

▲ページTOP▲


 ◇2.2…符号関数

符号を返す関数です。非常に簡単な仕組みですが、意外とよく使います。

function sgn(num) {
if (num>0) {
return 1;
} else if (num<0) {
return -1;
} else {
return 0;
}
}


####使用法####
sgn(数値1)

数値1の値が正のときに1、負のときに-1、0のときに0をそれぞれ返します。

####戻り値####
数値

▲ページTOP▲


■z その他

◇z.0…attachSoundが面倒くさいとき

大量にあると面倒くさいattachSoundを一発で済ます関数です。誰でも考え付くと思いますが、ネタ不足のため一応。

function soundAt(arrayS, pth) {
for (var i = 0; i<arrayS.length; i++) {
eval(pth)[arrayS[i]] = new Sound();
eval(pth)[arrayS[i]].attachSound(arrayS[i]);
}
}

####使用法####
soundAt(サウンド識別子の配列, ターゲット)

配列にはリンケージの識別子を入れます。
例えば3つのサウンドがライブラリにあって、識別子がそれぞれ"se1","se2","se3"の時、配列は["se1","se2","se3"]のようになります。
定義されるサウンドオブジェクトは識別子と同じ名前になります。
ターゲットはサウンドを定義する場所を指定します。

soundAt(["se1","se2","se3"], _root)
とすると_root.se1, _root.se2, _root.se3の三つのサウンドが定義されます。

####戻り値####
なし

▲ページTOP▲




HOME > FlashTips