スポンサーサイト

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

カテゴリ : スポンサー広告

KAGEX講座(15) - アクション機能を使ってみる

前回 KAGEX講座(14) - カメラ機能
KAGEXではアクション機能が使えます。
アクション機能を使うと簡単に画像を動かしたりまわしたりいろいろできます。
今回はとりあえず使ってみます。

@道路
@しおり show
キャラクタを表示しました。[l][r]

@しおり xpos=-100 time=1000
1000msかけて-100まで移動。
time属性で指定した時間をかけて指定位置まで移動します。

sync, nosync属性も使えます。
@道路
@しおり show
キャラクタを表示しました。[l][r]

@しおり xpos=-100 time=1000 sync
1000msかけて-100まで同期アクション。[l][r]

@しおり xpos=0 time=1000 nosync
1000msかけて0まで非同期アクション。[l][r]
デフォルトでは非同期動作(nosync)となっています。

非同期動作でも改ページ([p]タグ)ではキャンセルされてしまいます。
@道路
@しおり show
キャラクタを表示しました。[l][r]

@しおり xpos=-300 time=10000 nowait
10秒かけて移動。[p][cm]
アクション終了前に改ページされるとキャンセルされます。

これを防ぐにはnowait属性を使います。
@道路
@しおり show
キャラクタを表示しました。[l][r]

@しおり xpos=-300 time=10000 nowait
10秒かけて移動。[p]
[cm]
nowait属性をつけると大丈夫です。

アクションをキャンセルしたい場合にはstopaction属性を使用します。
@道路
@しおり show
キャラクタを表示しました。[l][r]

@しおり xpos=-300 time=10000
10秒かけて移動。[l][r]

@しおり stopaction
アクションをキャンセルしました。
stopactionではnowait属性が使われているアクションもキャンセルできます。

time属性はxpos以外の属性にも使えます。
@道路
@しおり show
キャラクタを表示しました。[l][r]

@しおり xpos=100 ypos=100 time=1000
1000msかけて移動。[l][r]

@しおり opacity=128 time=1000
1000msかけて半透明にする。[l][r]

@しおり rotate=360 time=1000
ぶん回してみる。[l][r]

@しおり xpos=0 ypos=0 opacity=255 rotate=-360 time=1000
いろいろ変えてみる。
opacity属性は説明してませんが透明度を指定する属性です(0~255)。
KAGで設定できるものと同じなので説明しません。
rotate属性も説明してませんが画像を回転させるのにつかいます。
こちらはそのうち説明します。

アクションが終わる前に同じ属性に対してアクションさせようとすると、前のアクションは途中で止まってしまいます。
@道路
@しおり show
キャラクタを表示しました。[l][r]

@しおり xpos=350 time=10000
10秒かけてxpos変化[l][r]

@しおり xpos=0 time=10000
移動途中に再びxposを変化させてみる
アクションがキャンセルされるわけではありません。
「キャンセル」という場合にはアクション終了時の値になります。
ここではアクションの途中の値でアクションが「止まって」しまいます。
↓の例と比較すると違いがわかると思います。
@道路
@しおり show
キャラクタを表示しました。[l][r]

@しおり xpos=350 time=10000
10秒かけてxpos変化[l][r]

@しおり stopaction
@しおり xpos=0 time=10000
キャンセルしてからxposを変化させてみる
アクションが途中で止まるような作りにはしないほうがいいと思います。

ちなみに背景に対しても使えます。
@道路
@しおり show
キャラクタを表示しました。[l][r]

@道路 xpos=100 ypos=100 time=1000
背景のアクション。

次回 KAGEX講座(16) - レイヤの回転(rotate)

続きを閉じる▲

スポンサーサイト

タグ : 吉里吉里 KAGEX 講座

カテゴリ : KAGEX

KAGEX講座(14) - カメラ機能

前回 KAGEX講座(13) - レイヤ表示位置(xpos, ypos)
今回はカメラ機能について解説します。

camerax, cameray
前回説明したxpos, yposでは個別のレイヤの表示位置をずらすことが出来ました。
camerax, camerayを使うと画面を見るカメラの位置をずらすことができます。
※もちろん実際にカメラがあるわけではありませんがそのような効果が得られます。
@道路
@しおり show 
キャラクタを表示[l][r]

@env camerax=100 cameray=100
カメラ位置を右に100、上に100ずらしました。
camerax、cameray属性は[env]タグで使います。
cameraxにマイナスの値を指定すると左、プラスの値を指定すると右にカメラ位置がずれます。
camerayにマイナスの値を指定すると下、プラスの値を指定すると上にカメラ位置がずれます。

camerazoom
camerazoom属性ではカメラをズームすることができます。
@道路
@しおり show 
キャラクタを表示[l][r]

@env camerazoom=200
カメラを2倍ズームにしました。
camerazoom=100で等倍(変化なし)です。
200を指定すれば2倍にズームアップされ、50を指定すれば1/2にズームバックされます。

camerazoomで拡大または縮小表示するときには、画面中央がずれないように拡大又は縮小されます。
あくまでカメラを操作していると思ってください。
↓camerazoom=500(5倍にズーム)してみる図
camerazoom_a.png

当然ですがcamerax,cameray属性でカメラ位置がずれたときにも同じです。
@道路
@しおり show 
キャラクタを表示[l][r]

@env camerax=100 cameray=100
カメラ位置を右に100、上に100ずらしました。[l][r]

@env camerazoom=500
カメラを5倍ズームにしました。
これを実行すると以下のようになります。
camerazoom_b.png

※カメラを動かしているというのが何だかわかり辛いのでもう1個サンプルおいておきます。
※time属性についてはまだ説明してませんがそのうちします。
※とりあえずコピペして実行してみてください。
@道路
@しおり show 
キャラクタを表示[l][r]

@env camerax=100 cameray=100 time=1000
カメラ位置を右に100、上に100ずらしました。[l][r]

@env camerazoom=500 time=1000
カメラを5倍ズームにしました。[l][r]

@env camerax=0 cameray=0 time=1000
カメラ位置をもとに戻しました。

次回 KAGEX講座(15) - アクション機能を使ってみる

続きを閉じる▲

タグ : 吉里吉里 KAGEX 講座

カテゴリ : KAGEX

HistoryLayer差し替えメモ

KAGEXのHistoryLayerを差し替えるためのメモ。
もっとKAGWindowとずぶずぶだと思ってたけど割と分離してた。
頑張って書き換えより最初から作った方が早いんじゃないか。

必須メンバ変数
外部から参照されていて、ないとエラーになるもの。
*name
レイヤの名前。書き込みのみ。
KAGWindowのコンストラクタで生成直後に書き込まれる。
HistoryLayerのコンストラクタでも書き込んでる。謎。
KAGWindowのほう要らん。

*visible
履歴が表示されているか。読み込みのみ。
何でこっち見てんだ。historyShowingの方見ろや。
これもKAGWindowの方書き換えた方がよさげ。

※kag3ex3でhistoryShowing見るように修正

*parent
履歴レイヤの親レイヤ。書き込みのみ。
履歴表示直前にkag.fore.baseに書き換えられる。
KAGEXのプライマリレイヤの方にしとけば必要なす。

*absolute
履歴レイヤの絶対位置。書き込みのみ。
履歴表示直前とreorderLayersで書き換えられる。
これもいらん気がする。

*storeState
履歴を栞に保存するか。読み込みのみ。
true固定でええがな。

*everypage
ページ単位での履歴表示を行うか。読み込みのみ。
internalRestoreFlagsの中で動作分岐してる。
やるならHistoryLayerの中で分けるべき。
そもそもstoreStateがtrue固定なら要らんっぽい。

必須メンバ関数
外部から呼び出されていて、ないとエラーになるもの。
*コンストラクタ(win, par)
KAGWindowのコンストラクタで生成される。

*store(ch)
渡された文字列chを履歴に記録する。

*reline()
改行を履歴に記録する。

*repage()
改ページを履歴に記録する。

*save()
保存すべきデータを返す。(storeStateがtrueの時のみ)
あとは勝手にKAGWindowが保存してくれる。

*load(dic)
dicにsave()で返したデータが渡される。
それを使って履歴の状態を復帰。(storeStateがtrueの時のみ)

*clear()
履歴の内容をクリア。
[clearhistory]タグで呼ばれる。

*setOptions(elm)
elmには[history]タグの属性が渡される。
履歴のオプションを設定。
output、enabled属性はKAGWindowの方で処理されるので必要なし。

*dispInit()
履歴を表示する。

*dispUninit()
履歴を非表示にする。

*beginIndent()
インデントを設定。
[indent]タグで呼ばれる。

*endIndent()
インデントを解除。
[endindent]タグで呼ばれる。

*setNewAction(action)
履歴アクションを登録。
[hact]タグから呼ばれる。
ワールド拡張の[dispname]タグ、[dispnameVoice]タグからも呼ばれる。

*clearAction()
履歴アクションの登録を終了(クリア)。
[endhact]タグなどから呼ばれる。
ワールド拡張の[afterline][afterpage]タグからも呼ばれる。

*windowMouseWheel(shift, delta, x, y)
履歴表示中にホイールが回転した場合KAGWindowから呼ばれる。

オプションメンバ関数
定義されている場合のみ呼ばれる。
*fontUpdate(hs)
hs : 履歴表示中か
kag.chDefaultAntialiasedかkag.chDefaultFaceが変更されたときに呼ばれる。

*autoReline()
メッセージレイヤにおいて自動改行があった場合に、store()の直前に呼ばれる。

*preIndent()
セリフ部分の自動インデントがあるときに呼ばれる。

*storeName()
ワールド拡張で名前が描画されたときにstore()の代わりに呼ばれる。

↓デフォルトのKAGEXで差し替えてもエラーが出ないヒストリーレイヤもどき
/*
 *  HistoryLayerの最少構成的な何か
 *  ・履歴の内容はtargetLayerに表示
 *  ・最大で9行分までてきとーに表示。
 *  ・最後に描画された行は履歴には描画されない。
 *  ・インデント/履歴アクション非対応
 *  ・ホイール回転で履歴を隠す。
 */

class MyHistoryLayer {
    property parent {
        setter(par) {
            targetLayer.parent = par;
        }
    }
    property visible {
        getter() {
            return targetLayer.visible;
        }
    }
    property absolute {
        setter(abs) {
            targetLayer.abs = abs;
        }
    }
    property name {
        setter(name) {
            targetLayer.name = name;
        }
    }
    property storeState {
        getter() {
            return true// 常にtrue
        }
    }
    property everypage {
        getter() { // 呼ばれることはないはず
            System.inform("everypageが呼ばれました");
            return false// 常にfalse
        }
    }
    
    var targetLayer; // 履歴を表示するレイヤオブジェクト
    var data = []; // 履歴データ(改行ごとに記録、リングバッファ)
    var curLine = 0// 現在の行(履歴データの最後尾)
    var maxLine = 10// 履歴に一度に表示できる行数(履歴データの大きさ)
    
    function MyHistoryLayer(win, par) {
        // コンストラクタ
        with (targetLayer = new Layer(win, par)) {
            // ターゲットレイヤの設定
            .setImageSize(par.width, par.height);
            .setSizeToImageSize();
        }
    }    
    function finalize() {
        // デストラクタ
        invalidate targetLayer if targetLayer !== void;
    }
    
    function store(ch) {
        // 文字列chを履歴に記録。
        data[curLine] += ch;
    }    
    function reline() {
        // 改行を履歴に記録。
        curLine = (curLine+1)%maxLine; // curLineを1つ進める。
        data[curLine] = "";
    }    
    function repage() {
        // 改ページを履歴に記録。
        reline(), reline(); // 改行を2回入れる
    }
    
    function save() {
        // 保存するデータを返す。
        if (!storeState) { return void; } // storeStateは常にtrue。一応
        else {
            var dic = %[];
            (dic.data = []).assignStruct(data);
            dic.curLine = curLine;
            return dic;
        }
    }    
    function load(dic) {
        // 履歴の状態の復帰
        if (!storeState) { return; } // storeStateは常にtrue。一応
        else if (dic !== void) {
            data.assignStruct(dic.data);
            curLine = dic.curLine;
        }
    }
    
    function clear() {
        // 履歴の内容をクリア。
        with (targetLayer) { .fillRect(00, .width, .height, 0x99000000); } // 塗りつぶし
        data.clear();
        curLine = 0;
    }
    
    function dispInit() {
        // 履歴を表示する
        with (targetLayer) {
            // 履歴の内容を描画
            .fillRect(00, .width, .height, 0x99000000); // 塗りつぶし
            var h = 20// 文字描画高さ
            for (var i = curLine+1; i != curLine; i = (i+1)%maxLine) {
                .drawText(20, h, data[i], 0xFFFFFF); // 文字描画
                h += .font.getTextHeight(data[i]) + 2// 次の行の描画高さを計算
            }
            // 履歴表示
            .visible = true;
        }
    }    
    function dispUninit() {
        // 履歴を非表示にする
        targetLayer.visible = false;
    }
    
    function setOptions(elm) {
        // 履歴のオプションを設定
    }
    
    function beginIndent() {
        // インデントを設定
    }
    function endIndent() {
        // インデントを解除
    }
    
    function setNewAction(action) {
        // 履歴アクションを登録
    }    
    function clearAction() {
        // 履歴アクションの登録おわり
    }
    
    function windowMouseWheel(shift, delta, x, y) {
        // 表示中にホイールが回転した
        kag.hideHistory(); // 履歴を非表示にする
    }
}

続きを閉じる▲

タグ : 吉里吉里 KAGEX TJS

カテゴリ : KAGEX

KAGEX講座(13) - レイヤ表示位置(xpos, ypos)

前回 KAGEX講座(12) - レイヤ表示位置(afx, afy, orx, ory)
前回からつづきましてレイヤの表示位置について解説します。

「回転原点」と「表示原点」では、レイヤ表示位置を計算する原点座標をレイヤごとに指定します。
※これはあまり変更しないほうがいいです。

「xoffset」と「yoffset」では、全てのキャラクタレイヤで共通のオフセットを定義します。
envinit.tjsで指定した数値だけ表示位置がずらされます。
※xoffsetは紹介してませんでしたが、yoffsetがy軸方向に対してずれるのに対してxoffsetはx軸方向にずれます。
※xoffsetとyoffsetはキャラクタレイヤだけに適用されるので注意。背景などはずれません。

xpos、ypos
今回紹介する「xpos」と「ypos」では、レイヤの表示位置をレイヤごとに指定することができます。
@道路
@しおり show
キャラクタを表示[l][r]

@しおり xpos=-100
キャラクタをずらしました[l][r]

@しおり xpos=100
キャラクタをずらしました[l][r]

@しおり xpos=0 ypos=100
y軸方向にもずらしてみる[l][r]

@道路 xpos=100
背景もずらせます


xposにマイナスの値を指定すると左、プラスの値を指定すると右にずれます。
yposにマイナスの値を指定すると下、プラスの値を指定すると上にずれます。

以下図解
↓表示位置をずらさない場合
charorigin.png
↓yoffsetで240ずらす
yoffset.png
↓xposで-100ずらす
xpos.png

positions
いちいちxposとyposを数値で指定するのは大変なので、envinit.tjsで定義しておくことができます。
%[
    times : %[
         : %[
            prefix : "01",
        ],
         : %[
            prefix : "02",
        ],
    ],    
    defaultTime : "昼",
    
    stages : %[
        道路 : %[
            image : "_bg01_TIME",
        ],
    ],
    
    levels : [],
    
    yoffset : 240,
    
    characters : %[
        しおり : %[
            poses : %[
                通常 : %[
                    image : "Rsiori_DRESS_n_FACE_0",

                    dresses : %[
                        夏制服 : "s",
                        冬制服 : "w",
                    ],
                    defaultDress : "s",
                    
                    faces : %[
                         : "k",
                         : "d",
                    ],
                    defaultFace : "k",                    
                ],
                直立 : %[
                    image : "siori_DRESS_s_FACE_0",
                    dresses : %[
                        夏制服 : "s",
                    ],
                    defaultDress : "s",
                    faces : %[
                         : "k",
                    ],
                    defaultFace : "k",
                ],
            ],
            defaultPose : "通常",
        ],
    ],
    
    transitions : %[
        tr_cross : %[
            time : 1000,
            method : "crossfade",
        ],
        tr_round : %[
            time : 1000,
            method : "universal",
            rule : "mask_round",
            vague : 100,
        ],
        tr_scroll : %[
            time : 1000,
            method : "scroll",
            from : "right",
            stay : "stayfore",
        ],        
        tr_face : %[
            time : 500,
            method : "crossfade",
            nosync : true,
        ],        
        tr_pose : %[
            time : 800,
            method : "crossfade",
            nosync : true,
        ],
    ],
    
    positions : %[
         : %[
            xpos : -100,
            ypos : 0,
        ],
         : %[
            xpos : 0,
            ypos : 0,
        ],
         : %[
            xpos : 100,
            ypos : 0,
        ],
    ],
];
位置情報はpositionsに定義します。その他の部分は前回までとおなじです。

定義したpositionsはpos属性に指定することで使用できます。
@道路
@しおり show pos=
キャラクタを表示[l][r]

@しおり pos=
キャラクタをずらしました[l][r]

@しおり pos=
キャラクタをずらしました[l][r]


省略記法も使えます。
@道路
@しおり show 
キャラクタを表示[l][r]

@しおり 
キャラクタをずらしました[l][r]

@しおり 
キャラクタをずらしました[l][r]


ただしpositionsに定義した位置情報はキャラクタレイヤでしか使えません。
例えば「@道路 pos=左」などと背景に使うことは出来ません。

これまでの簡単なまとめ。
afx
afy
回転原点。各レイヤごとに指定。画像上の座標。
orx
ory
表示原点。各レイヤごとに指定。ウィンドウ上の座標。
xoffset
yoffset
全てのキャラクタレイヤの位置をずらす。envinit.tjsで定義。
xpos
ypos
レイヤそれぞれの位置をずらす。

他にレイヤ表示位置に関わるものとしてカメラ機能があります。
それについてはまた次回説明します。
次回 KAGEX講座(14) - カメラ機能

続きを閉じる▲

タグ : 吉里吉里 KAGEX 講座

カテゴリ : KAGEX

KAGEX改造 - 環境SE拡張(pan)

ワールド拡張のSEではパンを指定できません。
ので出来るように拡張してみます。

改造
書き換えるのは「KAGEnvSE.tjs」です。
※以下のスクリプトは変更部分の前後の抜粋です。

↓15行目あたりの「var fade;」の次の行に「var pan = 0;」を追加します。
    var fade;
    var pan = 0;


↓26行目あたりの「f.count = count;」の次の行に「f.pan = pan;」を追加します。
        f.count = count;
        f.pan = pan;
    }


↓36行目あたりの「count = f.count;」の次の行に「secommands.pan(f.pan);」を追加します。
            count = f.count;
            secommands.pan(f.pan);
            if (name != "" && loop) {


↓93行目あたりの「loop = void;」の次の行に「secommands.pan(0);」を追加します。
        loop = void;
        secommands.pan(0); 
        var time;


↓128行目あたりの「wait : null,」と次の行の「];」の間に「pan : (…中略…) incontextof this,」を追加します。
    wait  null,
    pan : function(param, elm) {
        kag.se[id].pan = pan = +param;
    } incontextof this,
        ];


以上で効果音再生時にpan属性が使えるようになります。

使い方
pan属性は[seopt]タグのpan属性と共通です。
@se play=se_typing loop pan=-100
; @se_typing loop pan=-100 でも同じ
パンを指定して効果音再生[l][r]

@se name=se_typing pan=100
; @se_typing pan=100 でも同じ
パン変更[l][r]

@se name=se_typing stop
; @se_typing stop でも同じ
効果音停止[l][r]

@se play=se_typing loop
; @se_typing loop でも同じ
再び効果音再生[r]
stopするとパンは0に戻るので注意

※効果音ファイルはKAGEX講座(11)のものを使っています。

続きを閉じる▲

タグ : 吉里吉里 KAGEX TJS

カテゴリ : KAGEX

KAGEX講座(12) - レイヤ表示位置(afx, afy, orx, ory)

前回 KAGEX講座(11) - 効果音再生(se)
今回はレイヤの表示位置について解説します。

KAGEX講座(5)のyoffsetの部分で出てきましたが、キャラクタレイヤはデフォルトで中央に表示されます。
これはキャラクタレイヤは回転原点がafx=center、afy=bottom、表示原点がorx=center、ory=centerとなっているからです。
これだけでは意味わからんので以下解説します。

回転原点(afx, afy)
回転原点とは表示位置の基準となる「画像上の」座標です。
※回転原点は画像の回転拡大縮小にもかかわりますがここでは説明しません。
afx属性及びafy属性でレイヤごとに指定できます。

↓の画像で説明します。
aforigin.png
赤い線は透明部分もふくんだ画像のサイズです。
緑の線は画像の中央です。
afxに回転原点のx座標、afyに回転原点のy座標を指定します。
数値で指定することもできますが、afxは「left」「center」「right」、afyは「top」「center」「bottom」で指定すると便利です。
例えば「afx=left afy=top」のとき、回転原点は画像左上(水色の点)になります。
キャラクタレイヤのデフォルトである「afx=center afy=bottom」のときには、回転原点は画像下端中央(黄色の点)となります。
この座標がレイヤ表示位置にどう関係してくるかは表示原点の説明のあとで説明します。

表示原点(orx, ory)
表示原点とは表示位置の基準となる「ウィンドウ上の」座標です。
orx属性及びory属性でレイヤごとに指定できます。
回転原点と同じようにorxは「left」「center」「right」、oryは「top」「center」「bottom」で指定できます。
※もちろん数値でも指定できます。
ororigin__.png
例えば「orx=right ory=center」のとき、表示原点はウィンドウ右端中央(水色の点)になります。
キャラクタレイヤのデフォルトである「orx=center ory=center」のとき、表示原点はウィンドウ中央になります。

レイヤの表示位置
ワールド拡張のレイヤは画像上の「回転原点」とウィンドウ上の「表示原点」がかさなるように表示されます。
※yoffsetなどで表示位置がずらされていない場合です。
※今回は説明しませんがxpos属性、ypos属性でも表示位置をずらせます。
最初に書きましたがキャラクタレイヤの場合はデフォルトで「afx=center afy=bottom orx=center ory=center」となっています。
なのでキャラクタレイヤは
・回転原点 = 画像下端中央(afx=center afy=bottom) = ↑の回転原点の画像の黄色の点

・表示原点 = ウィンドウ中央(orx=center ory=center) = ↑の表示原点の画像の黄色の点
がかさなるように表示されます。
つまり↓の画像の位置になります。
charorigin.png

背景レイヤの場合はデフォルトで「afx=center afy=center orx=center ory=center」となっています。
なので背景は縦方向も含めて中央に表示されます。

※説明しておいてなんですが回転原点と表示原点はそれほど変更する必要はないと思います。
※一時的にレイヤの表示位置を変更する場合には次回説明するxposとyposを使います。

どうせなのでちょっと変更してみるサンプル
@道路
; 回転原点 = 画像中央
; 表示原点 = ウィンドウ中央
背景表示。[l][r]

@道路 afy=top
; 回転原点 = 画像上端中央
; 表示原点 = ウィンドウ中央
回転原点変更[l][r]

@道路 afx=left
; 回転原点 = 画像左上
; 表示原点 = ウィンドウ中央
回転原点変更[l][r]

@道路 orx=left ory=top
; 回転原点 = 画像左上
; 表示原点 = ウィンドウ左上
表示原点変更

ここでは背景の回転原点と表示原点を変更していますがキャラクタについてもおなじように設定することができます。
※yoffsetが設定されているとわかり辛いのでためす場合にはenvinit.tjsのyoffsetの部分を一時的に消しておくといいと思います。

続きを閉じる▲

タグ : 吉里吉里 KAGEX 講座

カテゴリ : KAGEX

KAGEX講座(11) - 効果音再生(se)

前回 KAGEX講座(10) - BGM再生(bgm)
今回は効果音を再生します。


効果音ファイルは↓を使います
http://www.mediafire.com/file/36todixvb0bv5b1/sound.zip
解凍すると「se_pon.wav」と「se_typing.wav」がでてくるのでsoundフォルダに入れておいてください。
※wavファイルの著作権はsakanoにあります。すきに使ってもらって構いません。

[se]タグ - play、buf、loop、stop属性
効果音を再生するには[se]タグを使います。
@se buf=0 play=se_typing
se_typeingを再生。[l][r]

@se buf=1 play=se_pon
se_ponを再生。

play属性に再生するファイル名を指定します。
buf属性に使用する効果音バッファを指定します。

buf属性は省略できます。
@se play=se_typing
se_typeingを再生。[l][r]

@se play=se_pon
se_ponを再生。

buf属性が省略されたときには自動的にあいているバッファを使います。
バッファがすべて使われている場合には最も番号の大きいバッファを使います。
※効果音バッファの数はConfig.tjsで設定します。

loop属性を指定するとループ再生されます。
@se play=se_typing loop
se_typingをループ再生。

※bgmとちがい、seではループ再生のデフォルトはfalseになっています。

効果音を止めるにはstop属性を使用します。
@se buf=0 play=se_typing loop
バッファ番号0のバッファでse_typingをループ再生。[l][r]

@se buf=0 stop
バッファ番号0のバッファを停止。


[se]タグ - name属性
buf属性のかわりにname属性を使うと、再生しているファイル名からバッファを指定することもできます。
@se play=se_typing loop
se_typingをループ再生。[l][r]

@se name=se_typing stop
se_typingを再生しているバッファを停止。

「name=se_typing」でse_typingが再生されているバッファを指定しています。

@se play=se_typing loop
se_typingをループ再生。[l][r]

@se name=se_typing play=se_pon
se_typingを再生しているバッファでse_ponを再生。

このスクリプト例ではse_typingを再生しているバッファでse_ponを再生させます。
結果としてse_typingが止まりse_ponが再生されます。

「se」からはじまるタグ
効果音のファイル名が「se」からはじまっていればもっと短く書くこともできます。
@se_typing buf=0
se_typingを再生。[l][r]

@se_pon buf=1
se_ponを再生。

「se」からはじまるタグは、タグ名がそのまま効果音のファイル名であると解釈されます。

loop属性などの属性も使えます。
@se_typing loop
se_typingをループ再生。[l][r]

@se_typing stop
se_typingを停止。


同期/非同期
効果音でも「sync」「nosync」属性が使えます。
syncで同期、nosyncで非同期動作となります。
@se play=se_typing buf=0 sync
se_typingを同期再生(終わるまで待つ)

BGMと同様に、効果音もデフォルトが非同期動作となっています。

※書きわすれていましたがBGMと効果音の設定ではenvinit.tjsを使用しません。

続きを閉じる▲

タグ : 吉里吉里 KAGEX 講座

カテゴリ : KAGEX

KAGEX改造 - トランジション拡張(extNagano.dll)

ワールド拡張のトランジションをちょっと拡張してみます。
具体的にはkrkr.STGで配布されているextNagano.dll(ver 1.2.4(RC2)に対応してみます。
KAGなら[loadplugin]タグでdll読み込むだけで使えるんですがワールド拡張で使うにはちょっとだけ改造しなければなりません。

とりあえずextNagano.dllをダウンロードしてきてpluginフォルダにおいておきます。

改造するのはsystemフォルダに入っているworld.tjsです。
323行目あたりのtransitionNameと336行目あたりのtransitionParamの中身を追加します。
var transitionName = %[
    "universal" => true,
    "crossfade" => true,
    "scroll" => true,
    "wave" => true,
    "mosaic" => true,
    "turn" => true,
    "rotatezoom" => true,
    "rotatevanish" => true,
    "rotateswap" => true,
    "ripple" => true,
    // ここから
    "3duniversal" => true,
    "blurfade" => true,
    "scanline" => true,
    "zoomfade" => true,
    "rgbfade" => true,
    "spin" => true,
    "flutter" => true,
    "book" => true,
    "imagewipe" => true,
    "honeyturn" => true,
    "morphing" => true,
    "multiripple" => true,
    // ここまで
    ];

var transitionParam = %[
    "time" => true,
    "rule" => true,
    "vague" => true,
    "from" => true,
    "stay" => true,
    "wavetype" => true,
    "maxh" => true,
    "maxomega" => true,
    "bgcolor1" => true,
    "bgcolor2" => true,
    "mosaic" => true,
    "maxsize" => true,
    "turn" => true,
    "bgcolor" => true,
    "factor" => true,
    "accel" => true,
    "twistaccel" => true,
    "twist" => true,
    "centerx" => true,
    "centery" => true,
    "rwidth" => true,
    "roundness" => true,
    "speed" => true,
    "maxdrift" => true,
    "msgoff" => true,
    "charoff" => true,
    "transwait" => true,
    "showaction" => true,
    "hideaction" => true,
    "wait" => true,
    // ここから
    "type" => true,
    "speed1" => true,
    "s1" => true,
    "accel1" => true,
    "a1" => true,
    "bound1" => true,
    "speed2" => true,
    "accel2" => true,
    "bound2" => true,
    "exponent" => true,
    "blur1" => true,
    "blur1x" => true,
    "blur1y" => true,
    "blur2" => true,
    "blur2x" => true,
    "blur2y" => true,
    "prerender" => true,
    "zoom1" => true,
    "zoom2" => true,
    "derayr" => true,
    "derayg" => true,
    "derayb" => true,
    "deraya" => true,
    "type1" => true,
    "type2" => true,
    "back" => true,
    "alpha" => true,
    "slip" => true,
    "dir" => true,
    "size" => true,
    "order" => true,
    "before" => true,
    "after" => true,
    "count" => true,
    "wavecount" => true,
    "rwdith" => true,
    "maxdrift" => true,
    "roundness" => true,
    "delaylast" => true,
    // ここまで
    ];

「// ここから」と「// ここまで」にはさまれている部分をそれぞれ追加します。
※transitionParamの「// ここから」の前の「wait => true」でコンマがぬけているのでそれもつけてください。
※×「wait => true」 → ○「wait => true,」

これだけです。
あとはdllを読み込めばcrossfadeやuniversalなど他のトランジションと同じように使えます。
extNagano.dllにふくまれるトランジションについての詳細はdll付属のサンプルとtxtを読んでください。


↓サンプルスクリプト。
envinit.tjsはKAGEX講座(4) - 背景表示のものを使っています。
@loadplugin module=extNagano.dll

@道路 time=2000 trans=scanline
背景をscanlineで表示。[l][r]

@ time=2000 trans=spin type1=4 type2=5
背景をspinできりかえ。[l][r]

@ time=4000 trans=multiripple count=5 wavecount=0
背景をmultirippleできりかえ。

続きを閉じる▲

タグ : 吉里吉里 KAGEX TJS

カテゴリ : KAGEX

KAGEX講座(10) - BGM再生(bgm)

前回 KAGEX講座(9) - トランジション定義(transitions)
今回はBGMを再生します。

音楽ファイルは↓を使います。
http://www.mediafire.com/file/ye1fqs9f3civx4e/bgm.zip
解凍すると「bgm_01.ogg」と[bgm_02.ogg」が出てくるのでbgmフォルダに入れておいてください。
HOLIDAY LANDのmidiファイルを変換して使っています。

Config.tjs
envinit.tjsはそのままですがoggファイルを再生するためにConfig.tjsをいじる必要があります。
Config.tjsの682行目あたり
// BGM の設定です。
// CD-DA, Wave, MIDI のいずれかを BGM として再生することができます。

// ◆ BGM再生メディア
// type 変数に設定する文字列で、使用するサウンドバッファを決めることができ
// ます。
// "Wave"  : WaveSoundBuffer ( wav等(プラグインで再生できる物も含む) )
// "MIDI"  : MIDISoundBuffer ( mid,smf )
// "CDDA"  : CDDASoundBuffer ( cda )
;type = "Wave";

デフォルトでは「;type = "MIDI";」となっている部分を「;type = "Wave";」とします。

[bgm]タグ
ではさっそく再生してみます。
@loadplugin module=wuvorbis.dll

@bgm play=bgm_01 loop
BGMを再生しました。[l][r]

@bgm stop
BGMを停止しました。[l][r]

oggファイルを再生するために最初に[loadplugin]タグwuvorbis.dllを読み込む必要があります。
wuvorbis.dllはKAGEXのpluginフォルダに最初から入っています。

bgmを再生するには[bgm]タグを使います。
play属性に再生するファイル名を指定します。
loop属性をつけるとループ再生されます。(最後まで再生し終わるとまたはじめから再生)
loop属性はデフォルトでtrueなので省略してもおなじです。
ループ再生させたくなければ「loop=false」とします。

「bgm」から始まるタグ
BGMのファイル名が「bgm」から始まっていればもっと短く書くこともできます。
@loadplugin module=wuvorbis.dll

@bgm_01
; @bgm play=bgm_01 と同じ
BGMを再生しました。[l][r]

@bgm stop
BGMを停止しました。[l][r]

「bgm」から始まるタグは、タグ名をそのままbgmのファイル名として再生します。

さらにスクリプト例
@loadplugin module=wuvorbis.dll

@bgm_01
; @bgm play=bgm_01 と同じ
BGMを再生しました。[l][r]

@bgm_02
; @bgm play=bgm_02 と同じ
BGMを切り替えました。[l][r]

@bgm stop
BGMを停止しました。

bgm_01からbgm_02に切りかえています。

フェードイン/フェードアウト
フェードインなどを行うにはtime属性を使用します。
@loadplugin module=wuvorbis.dll

@bgm_01 time=2000
; @bgm play=bgm_01 time=2000 と同じ
BGMをフェードインしました。[l][r]

@bgm stop time=2000
BGMをフェードアウトしました。

time属性にフェードイン/フェードアウトする時間を指定すればいいだけです。

同期/非同期
キャラクタの切りかえで使った「sync」「nosync」属性ですが、bgmのフェードイン/フェードアウトでも使えます。
@loadplugin module=wuvorbis.dll

@bgm_01 time=2000 sync
; @bgm play=bgm_01 time=1000 sync と同じ
BGMを同期フェードインしました。[l][r]

@bgm stop time=2000 sync
BGMを同期フェードアウトしました。

BGMではデフォルトが非同期動作となっているので、sync属性を指定して同期動作でフェードイン/フェードアウトさせてみました。

続きを閉じる▲

タグ : 吉里吉里 KAGEX 講座

カテゴリ : KAGEX

吉里吉里のタグについて

吉里吉里のタグの基本的なことについて。

タグ名、属性
タグ名はタグの名前です
属性はタグのオプションを指定するものです。
@trans time=0 rule=trans vague=1

この例ではタグ名が「trans」属性名が「time」「rule」「vague」です。


ダブルクォートについて
リファレンス:http://devdoc.kikyou.info/tvp/docs/kag3doc/contents/Tags.html#tag_overview
>属性の値は "" で囲んでも囲まなくてもおなじです。
@trans time=0 rule=trans vague=1
@trans time="0" rule="trans" vague="1"

上の二行はおなじ動作になります。
>ただし、属性の値に空白をふくむような場合は、"" で囲まなければなりません。たとえば、[font face="MS Pゴシック"] です。


エンティティ
リファレンス:http://devdoc.kikyou.info/tvp/docs/kag3doc/contents/Var.html#id339
>エンティティは、& の後に書かれた属性の値の内容を、TJS2 式として実行して、その結果で属性の値を置き換える機能です。
@trans time=0 rule=trans vague=1
@trans time=&100-100 rule=trans vague=&5/5

上の二行はおなじ動作になります。
「100-100」は&がついているのでTJS式として実行され、結果は0となります。
「5/5」についてもTJS式として実行され、結果は1となります。
&のあとにはTJS式なら何でも書けます。

変数も書けます。
@eval exp="f.time = 0"
@trans time=&f.time method=crossfade vague=1

[eval]タグでゲーム変数f.timeに0を代入しています。
※exp属性の値は=をふくむのでダブルクォートで囲んでいます。
二行目のf.timeには&がついているので「f.time」がTJS式として実行され結果は0となります。

[eval]タグのexp属性には&をつけていません。
これはexp属性がもともとTJS式の値を指定する属性だからです。
リファレンス:http://devdoc.kikyou.info/tvp/docs/kag3doc/contents/Tags.html#eval
値の項目がTJS式となっていることに注意してください。
[eval]タグ以外にも[button]タグの「exp」「onenter」「onleave」属性、[emb]タグの「exp」属性などがTJS式を直接指定する属性となっています。


属性値の省略
属性値を省略して属性名だけ書くと自動的にtrueが指定されます。
@current layer=message0 page=fore withback=true
@current layer=message0 page=fore withback

上の二行はおなじ動作になります。

続きを閉じる▲

タグ : 吉里吉里 KAG 講座

カテゴリ : KAG

最新記事
カテゴリ

openclose

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