なかなかやれてないのですが、とりあえず宝箱39個まで。 まだ攻略してない部屋があるのでそれが先だけど、 部屋以外の宝を探すのは大変そう。
吉里吉里 2.25 beta 5 / KAG3 3.25 beta 5 が公開されました。
変更点は吉里吉里 開発版(β版)の詳細よりどうぞ。
TJS スクリプト中から KAG のタグの実行を登録できるようにする改造をしてみました。
global.kag.conductor.enqueueTag(%[tagname : 'trans', method : 'crossfade', time : '50']); global.kag.conductor.enqueueTag(%[tagname : 'wt']);
と書いておくと、吉里吉里に制御が戻った時点でこれらのタグが実行されます。
KAGWindow.onConductorUnknownTag() から使うと、正規表現的なマクロ定義ができて面白いかもしれません。
例えばこんな感じ。
function onConductorUnknownTag(tagname, elm){
// KAG で本文中に
// @@ほげほげ
// と書くと、tagname が '@ほげほげ' としてこの関数が呼び出される
var r = /^@(.+)$/;
if(r.exec(tagname).count == 0){
throw new Exception("タグ/マクロ \"" + tagname + "\" は存在しません");
return 0; // この戻り値は、各タグハンドラが返す物とおなじ
}
//
// いろいろやる
//
conductor.enqueueTag(%[tagname : 'trans', method : 'crossfade', time : '50']);
conductor.enqueueTag(%[tagname : 'wt']);
return 0;
}
--- Conductor.tjs.orig 2005-06-19 20:18:50.562500000 +0900
+++ Conductor.tjs 2005-06-19 20:17:31.312500000 +0900
@@ -17,7 +17,7 @@
var oneshot;
var _interrupted = false; // 中断中か
var timerEnabled = false; // タイマが起動中か
- var pending; // 後回しにされたタグ
+ var pendings; // 後回しにされたタグ
var inProcessing = false; // timerCallback を処理中かどうか
var reentered = false; // timerCallback 中に 再入したか
var nextTimerTick = 0; // 次にタイマーが発動されるはずの tick
@@ -33,6 +33,8 @@
oneshot = new AsyncTrigger(timerCallback, '');
// これも同様
oneshot.cached = true; // イベントのキャッシュを有効に
+
+ pendings = [];
}
function finalize()
@@ -46,7 +48,7 @@
function clear()
{
// clear オーバーライド
- pending = void;
+ pendings.clear();
super.clear();
}
@@ -67,11 +69,11 @@
inProcessing = true;
for(;;)
{
- if(pending !== void)
+ if(pendings.count > 0)
{
// 後回しにされたタグがある場合
- obj = pending;
- pending = void;
+ obj = pendings[0];
+ pendings.erase(0);
}
else
{
@@ -108,7 +110,7 @@
switch(step)
{
case -5: // いったんイベントを処理(現在のタグは後回し)
- pending = obj;
+ pendings.insert(0, obj);
oneshot.mode = atmAtIdle;
oneshot.trigger(); // トリガ
timer.interval = 0; // タイマは停止
@@ -123,7 +125,7 @@
reentered = false;
return;
case -3: // 後回ししてブレーク
- pending = obj;
+ pendings.insert(0, obj);
timer.interval = 0; // タイマは停止
inProcessing = false;
reentered = false;
@@ -278,10 +280,10 @@
t.enabled = st.enabled;
timerEnabled = src.timerEnabled;
_interrupted = src._interrupted;
- if(src.pending !== void)
- (Dictionary.assign incontextof pending)(src.pending);
+ if(src.pendings.count > 0)
+ pendings.assignStruct(src.pendings);
else
- pending = src.pending;
+ pendings.clear();
super.assign(src);
}
@@ -295,23 +297,27 @@
{
// restore オーバーライド
super.restore(...);
- pending = void;
+ pendings.clear();
}
function loadScenario()
{
// loadScenario オーバーライド
- pending = void;
+ pendings.clear();
super.loadScenario(...);
}
function goToLabel()
{
// goToLabel オーバーライド
- pending = void;
+ pendings.clear();
super.goToLabel(...);
}
+ function enqueueTag(tag)
+ {
+ pendings.add(tag);
+ }
}
だそうです。 http://key.visualarts.gr.jp/
CLANNAD、機会があればやりたいなぁと思いつつも、 DVDドライブ持ってないなぁ→今のところ記録型 DVD は使う予定ないけど CD-R は書きたい→今ある CD-R/RW ドライブを捨てるのも何だしなぁ →DVD-ROM ドライブを買ってきてもいいけど、ドライブ2個ってのもなぁ
というほとんど「やらない理由探し」状態だったので、 PS2 版が出たらちょうどいい機会なので買いそう。
Layer を継承したクラスのインスタンスに対して loadImages() すると 「この type のレイヤでは描画や画像読み込みや画像サイズ/位置の変更/取得はできません」 というエラーが出てきました。
覚えのないエラーだったのでちょっと悩みましたが、原因が判明。
class MyLayer extends Layer{
var type;
...
と、メンバ変数として type を定義してしまっていたので これが Layer の type とかぶってしまっていたのでした。
メンバ変数の定義には気をつけないといけないですね。