2007/03/30(金)

mixiのサイドバーを削って横幅を狭めるブックマークレット

カテゴリー: JavaScript — KAY @ 07:50:25

ものっそい今更という気がしますが。^^;
mixi自体に付いてる機能で2列表示、3列表示の切り替えは出来ますしねえ……。
でもまあ、車輪の再発明はKAYのオハコなので、ネタ的には全然おっけー。(マジかよ)
ブックマークレットの練習という感じで作ってみたんですが、得るものは非常に少なかったですね。やってる事はフツーにスクリプト書くのと変わんないので、当たり前といえば当たり前ですが。^^;
大仰な名前まで付いてますが、どっちかっつーとこれ、小技、小ネタの範疇ですよねえ。スクリプトを直接ブックマークするという発想の面白さと、導入の容易さが受けたって感じでしょうか。まあいいや。

(続きを読む…)

2007/03/25(日)

正規表現リテラルの罠

カテゴリー: ゲーム制作, 吉里吉里 — KAY @ 01:49:49

文法的に間違っていないにも拘らず、syntax errorが投げられてしまう例。

//2.28 stableにて確認
var regexp = //正規表現オブジェクト
    /[a-z]+/;

どうやら、行コメントを書いて、改行後すぐに正規表現リテラルが来ると例外が発生するようです。
前回のエントリと合わせて、公式の掲示板あたりに報告した方がよさそうかな?

(2007/03/28追記)

報告済み。修正済み。安定版は時期リリース版で対応かな?
http://kikyou.info/tvp/bbs/bbs.cgi?mode=&action=treeall&num=10082

2007/03/21(水)

プライマリレイヤにltAddAlphaを指定すると……

カテゴリー: ゲーム制作, 吉里吉里 — KAY @ 02:46:39

2.28安定版での話です。
とりあえず、以下のテストスクリプトを実行してみて下さい。

class TestWindow extends Window {
    var timer;
    var primary;
    var counter = 0; 

    //コンストラクタ
    function TestWindow() {
        super.Window();
        borderStyle = bsSingle;
        innerSunken = false;
        setInnerSize(300, 300);
        visible = true; 

        timer = new Timer(createLayer, "");
        timer.capacity = 1;
        timer.interval = 50;
        add(timer); 

        primary = new Layer(this, null);
        primary.setPos(0, 0);
        primary.setSize(300, 300);
        primary.fillRect(0, 0, 300, 300, 0xffffffff);
        primary.type = ltAddAlpha;          //●
        primary.visible = true;
        add(primary);
    } 

    //デストラクタ
    function finalize() {
        super.finalize();
    } 

    function createLayer() {
        if(++counter > 100) {
            timer.enabled = false;
            return;
        }
        var layer = new Layer(this, primary);
        layer.setPos(0, 0);
        layer.setSize(150, 300);
        layer.visible = true;
        add(layer);
    }
} 

var win = new TestWindow();
win.timer.enabled = true;

↓こちらからダウンロードできます。
startup.tjs

50msごとにウィンドウの左半分にレイヤを1枚ずつ重ねていき、100枚になったら停止する、というだけのものです。
これは……バグなのかなあ。仕様? まあ、プライマリレイヤなんだから完全不透明なレイヤタイプを使えという事ですかね。

(2007/03/28追記)

公式の掲示板でW.Deeさんよりご回答いただきました。

http://kikyou.info/tvp/bbs/bbs.cgi?mode=&action=treeall&num=10082

というわけで、演算誤差が原因との事でした。まあ、プライマリレイヤはltOpaqueで十分だと思うので、特に問題はない、かな?
プライマリ以外は……どうだろう。多分大丈夫だと思うけど。

2007/03/20(火)

「Attack Rate」早速予約した。

カテゴリー: チップチューン, 雑記, 音楽 — KAY @ 09:48:20

http://www.vorc.org/jp/20070320022733

これこれーっ!!
うわーまさかVORCで梅本竜氏の名前を見る事になるとはー。
とりあえず100万回予約した。

なんかもーサンプル曲聴いてるだけで懐かしくて泣きそう……。

関連リンク:
Risque-Fellow

2007/03/17(土)

田中ロミオが小説家デビュー!!

カテゴリー: 雑記 — KAY @ 22:43:41

http://www.gagaga-lululu.jp/gagaga/1st.html

ぎぃいぁあああぁぁぁあぁああぁあ──……!!!!!!!!

……もう、鼻血出そう……。

2007/03/13(火)

外部からスーパークラスのプロパティを参照する

カテゴリー: ゲーム制作, 吉里吉里 — KAY @ 02:31:22

以下のような感じで、外部からオブジェクトのスーパークラスのプロパティにアクセスする事が可能です。
TJS2おもろい。

//例えば、Layerクラスを継承したSubLayerというクラスからインスタンスを生成する
var layer = new SubLayer(window, parent);   

*(&Layer.width incontextof layer) = 100;                 //setterを呼び出す
System.inform(*(&Layer.absolute incontextof layer));     //getterを呼び出す

メソッドなんかだと、Dictionaryクラスのメソッドを呼び出すのにincontextof演算子はほぼ必須ですので、見慣れたもんですが、プロパティの方はあまりこういう呼び出し方はしないのではないでしょうか。
先に紹介した縦書きレイヤクラスなんかで威力を発揮すると思います。
実際に運用する際に、それが縦書きレイヤなのかそうじゃないのかわからない状態でオーバーライドしてしまったプロパティ(widthやheightなど)を参照したい場合。
スタンダードに行くなら、instanceof演算子を使って処理を分けるのが普通でしょうが、似たような処理を2回も書くのはめんどくさいですもんねえ。^^;

2007/03/08(木)

Layerクラスのオブジェクト生成直後のプロパティ一覧

カテゴリー: ゲーム制作, 吉里吉里 — KAY @ 19:49:57

値が不定のものもあるので、ぴったりこの通りというわけではないです。まあ、参考程度に。
2.28 stableにて書き出しました。

(続きを読む…)

2007/03/04(日)

Fontクラスのプロパティをオーバーライドしてみる

カテゴリー: ゲーム制作, 吉里吉里 — KAY @ 02:45:13

吉里吉里のFontクラスは特殊な位置付けで、ユーザが任意にnewする事が出来ません。
ただし、Layerクラスのfontプロパティとしてぶら下がっているFontオブジェクトのメンバに対しては、上書きが可能のようです。
これを利用して、こんな珍妙なLayerクラスが作れます。

(続きを読む…)

2007/03/01(木)

メンバの有無の確認方法

カテゴリー: ゲーム制作, 吉里吉里 — KAY @ 21:27:00

TJS2で、Dictionaryクラスのオブジェクト(辞書配列)にメンバが存在するかどうかは

var dic = %[];
if(dic.hoge === void) {
    System.inform("無いよっ");
}

このようにvoidとの比較で出来ますが、これと同じ事を他のオブジェクトでやると例外が出ます。

var obj = new Date();
if(obj.hoge === void) {     //この行で例外が発生する。
    System.inform("無いってば!");
}

じゃあ辞書配列以外のオブジェクトでメンバの有無はどうやって確認するんだという話ですが、typeof演算子を使います。

var obj = new Date();
if(typeof obj.hoge == "undefined") {        //これならOK。
    System.inform("無いってば!");
}

この仕様は結構はまりやすそう(というかはまった)なので、気を付けましょう。
typeof演算子による比較は辞書配列でも使えますので、はまりそうだなという人は、比較の際は必ずtypeof演算子を使う、という風に決めておいた方がいいかも。

というお話。