アクションスクリプト(1.0)覚え書き

Topページ

脱出ゲーム等の初期化 効果音再生 マウスポインタアイコン フォーカス フォント変更 ループ抜け 関数 URLリンク ダブルクリック 配列関連 繰り返し 同一条件分岐 タイマー 文字列置換 3桁カンマ PW等数値変更ルーチン 演算子 Mathクラス ローカルI/O オブジェクト管理 Suzuka


// 脱出ゲーム等の初期化
Stage.showMenu = false;  // コンテキストメニューを非表示にする
_focusrect = false;      // ボタンのTabキーを無効にする
se_obj = new Sound();    // 効果音オブジェクトを生成
// コンテキストメニューに関しては以下の方法もあります
var menu_cm = new ContextMenu();
menu_cm.builtInItems.forward_back = false;      // 先送り、戻る
menu_cm.builtInItems.loop = false;              // ループ再生
menu_cm.builtInItems.play = false;              // 再生
//menu_cm.builtInItems.print = false;           // プリント
//menu_cm.builtInItems.quality = false;         // 画質
menu_cm.builtInItems.rewind = false;            // 巻き戻し
menu_cm.builtInItems.zoom = false;              // 拡大

_root.menu = menu_cm;


// 効果音再生、停止
_root.se_obj.attachSound("se_Escape");
_root.se_obj.start();  // ()内は再生開始位置[秒](省略時0), 再生回数(省略時1)
_root.se_obj.stop();   // ()内はサウンドのリンケージ名(省略時は全てのサウンド)


// ボタンやスプライトのマウスポインタを手のアイコンにしない
btn_Item.useHandCursor = false;


// テキストフィールドにフォーカスを与える
Selection.setFocus("txt_InputPW");


// ダイナミックテキストのフォントを変更する(Suzukaで確認)
var format = new TextFormat();
// 文字を赤くする(SWF8で構文チェックするとColorとなり動作しなくなるので注意)
format.color = 0xFF0000;
textArea.setNewTextFormat(format);      // setTextFormatの方が良いかもです


// ループを抜ける
break;


// 関数の処理結果を呼び出し元に返す
function fct_xxxxx( Value ) {
        var w_Anser = Value * 2;
        return w_Anser;
}


// URLリンク
on (release) {
	getURL("http://www.miyab.com","_blank");	// URL,ターゲットウィンドウ,第3引数はCGIで使用
}


// ダブルクリックの判定関数(ボタンのクリックイベントから呼ぶ)
function DoubleClickCheck() {
        var date_obj = new Date();
        // 時、分、秒、ミリ秒を個別に取得
        w_Hour = date_obj.getHours();
        w_Minutes = date_obj.getMinutes();
        w_Seconds = date_obj.getSeconds();
        w_Milliseconds = date_obj.getMilliseconds();
        // ミリ秒に変換する
        w_Milliseconds2 = w_Milliseconds + w_Seconds * 1000 + w_Minutes * 60000 + w_Hour * 3600000;
        // 500ミリ秒以下ならダブルクリックと判定する(ItemClickedTimeには初期値-10などを代入しておく)
        w_DoubleClick = (w_Milliseconds2 - ItemClickedTime) < 500;
        ItemClickedTime = w_Milliseconds2;
        return(w_DoubleClick);
}


// 配列関連
// 要素の数(lengthプロパティ)
var w_Count = ary_xxx.length;
// 任意の位置に値を挿入(Indexの位置(先頭0)に"あかん"を挿入)
ary_xxx.splice(Index,0,"あかん");


// 繰り返し
for( I01 = 0; I01 < aryEQKind.length; I01++ ) {

}


// 同一条件の複数値の分岐
switch ( expression ) {
case 1:
        // 1のときの処理
        break;
case 2:;     // Suzukaで複数条件の判定をする場合は,最後の条件以外にセミコロンが必要のようです。
case 3:
        // 2または3のときの処理
        break;
default:
        // 条件に当てはまらないときの処理
        break;
}


// タイマー処理
function MyFunc(Prm01){
        var wrk = Prm01 * 10;
        trace(wrk);
}
myID = setInterval(MyFunc,3000,MyNumber);  // 関数へのパラメタは第3パラメタ以降に記述


// 文字列置換ルーチン
function StrReplace(str, fromText, toText) {
        // strをfromTextで区切って配列に格納する
        var temp_array = str.split(fromText);
        // 配列temp_arrayを文字列toTextでつなげる
        return temp_array.join(toText);
}


// 3桁カンマ付加ルーチン(引数はStringで渡す)
function setComma(number_str) {
    if (number_str.length>3) {
        number_str = arguments.callee(number_str.substr(0, -3))+","+number_str.substr(-3);
    }
    return number_str;
}


// PW等数値変更ルーチン(ダイナミックテキストのインスタンス名をtxt_Pass1〜4とした場合)フレームアクションに記述
function fct_NumChg( Kind ) {
        var w_PN = Number(this["txt_Pass"+PWKind].text);
        if (w_PN < 9) {         // 0〜9の範囲で変更
                w_PN ++;
        } else {
                w_PN = 0;
        }
        this["txt_Pass"+PWKind].text = w_PN;
}
// 数値を変更するイベントで以下のように呼び出す
        fct_PWNumChg(1);


// 演算子
x ++;           // インクリメント(x に1を加算)
x --;           // デクリメント(x から1を減算)
x += 10;        // x に10を加算(- * / も同様)
x = a % b;      // 除算の剰余(x には a / b の余り)


// Mathクラス
Math.sqrt(n);    // 平方根
Math.sin(n);     // サイン
Math.cos(n);     // コサイン
Math.tan(n);     // タンジェント
Math.atan2(y,x);     // コサイン
Math.abs(n);     // 絶対値
Math.random();  // 0以上1未満の乱数
Math.round(n);   // 小数点以下を四捨五入
Math.floor(n);   // 小数点以下を切り捨て
Math.ceil(n);    // 小数点以下を切り上げ
Math.pow(x,n);  // x の n乗


// ローカルへのI/O
// (SWF6だとホスト名からwwwが削除されたフォルダに保存されるようです)
SharedObject.getLocal("game_data");


// オブジェクトの管理
アクションゲームなどでは attachMovie でムービークリップのインスタンスを生成し、
当たり判定や破棄などの管理を行うことが多いですが、数が多くなってくるとどうしても
遅くなりがちです。そこを何とかできないかと検索して見つけたのが以下のサイトです。
「超高速オブジェクト管理」
関連して、複数のオブジェクト型変数を生成したときには、それぞれのオブジェクトの
プロパティ名は同一の名前を指定できないようです。(これでSuzukaが何10回も落ちました…)

Suzuka(ver. 0.8.1)に関して

◆スクリプトエディタで「コードスニペット」なるコードのひな型の入力支援機能が使えて便利です。
例えば if と入力して Tabキーを押すと、

if (true) {
	
}

となり、on と入力して Tabキーを押すと、

on (release) {
	
}

となります。
if や on などのキーワードは初期状態でいくつか登録されていますが、それぞれを編集したり新しく作ったりすることもできます。

◆Inkscapeで作成したベクター画像のサイズをアクションスクリプトの _width 等で求めたときに、実際のサイズより大きくなる場合があります。Inkscapeでストローク(線)を太くして描画し、端を丸くしていたりするとこのような現象が起きます。これは、「ストロークをパスに変換」することで解決します。

◆マスクを設定したスプライト上に _ゴシック フォントを指定したダイナミックテキストを置くと、なぜか表示されません。通常のフォントだと表示されます。なぜか分かりませんが、とりあえずマスクを設定しないスプライトに置いて対処しています。


コメント

入力されたメアドは公開されません。適当でも通るようです。パスワード入力の画面が表示された場合は、下部にある「Skip this step. Post my comment as a Guest.」をクリックすると投稿できます。表示されない場合は画面更新(IEですとF5キーやCtrl+F5キー)をすると表示される場合があります。お問い合わせフォームはこちらです。

blog comments powered by Disqus

このページの一番上へ  Topページへ

Copyright(C) MiyaB Flash 2009-2014, All rights reserved.