2007/03/04(日)

Fontクラスのプロパティをオーバーライドしてみる このエントリをはてなブックマークに追加 

Filed under: ゲーム制作,吉里吉里 — KAY @ 02:45:13

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

//縦書きレイヤ
class VerticalLayer extends Layer {
    var fontAngle;          //font.angleプロパティ
    var fontFace;           //font.faceプロパティ

    //コンストラクタ
    function VerticalLayer(*) {
        super.Layer(*);

        font.angle += 2700;
        fontAngle = &font.angle;
        &font.angle = &myFontAngle;

        font.face = "@" + font.face;
        fontFace = &font.face;
        &font.face = &myFontFace;
    }

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

    //他の描画系メソッドも似た様なやり方でオーバーライドすればいい感じに動くはず
    function drawText(x, y, *) {
        super.drawText(height - y, x, *);
    }

    property width {
        setter(v) {
            super.height = v;
        }
        getter {
            return super.height;
        }
    }

    property height {
        setter(v) {
            super.width = v;
        }
        getter {
            return super.width;
        }
    }

    property myFontAngle {
        setter(v) {
            fontAngle = v + 2700;   //3600以上を指定すると自動的に丸められるみたいです。
        }
        getter {
            return fontAngle + 900;
        }
    }

    property myFontFace {
        setter(v) {
            fontFace = "@" + v;
        }
        getter {
            return fontFace.substring(1);
        }
    }
}

(^-^)v
もちろん、メソッドに関しても同様のやり方でオーバーライド出来ます。
ただ、見て判るとおり、このレイヤはかなり特殊な振る舞いをしますので、あんまり人に勧められるもんじゃねーかもです。

今、KAGで言うMessageLayer的な文字描画用レイヤを書いてる最中なんですが、最初はMessageLayer同様、真偽値を取るverticalというメンバを持たせて処理を分けてたんですね。
でもなんか、めんどくせーのよこれが。縦書きの時だけ一時レイヤに描画して、affine変換で回転させてべちゃっと貼り付けるか? とも思ったんですが、描画系のメソッドはなんか重そうというファジーな理由で却下しました。^^;

そのうち、気が向いたら今書いてる文字描画レイヤもここに載せるかもです。例のごとく、超簡単なやつですよ?

コメント(0)

コメントはまだありません。

トラックバック(0)

この記事へのトラックバックはありません。

この投稿へのコメントの RSS フィード。 TrackBack URL

コメントする