[Subject Prev][Subject Next][Thread Prev][Thread Next][Subject Index][Thread Index]

[OSASK 2203] Re: MOSkey



  こんばんは、川合です。


Myurika さんは 2001/09/22 20:01:24 の「[OSASK 2202] Re: MOSkey」
で書きました:

>  普通に考えると、メイク/ブレイクが拾いたいことの方が少ないので、仕方な
>いのかな、と思ってたんです。

  いやいや、シューティングゲームを作る場合(たとえばinvader2)、
キーのメイクブレイクが拾えるかどうかは死活問題です。まあ、ジョイ
パッドへ逃げるという手はありますが。

>  でも、OSASKでこうも簡単に拾えてしまうとなんというか…。

  まあ考えようによっては、普通のキー入力をするにしてもいちいちシ
グナルとの対応を宣言しなければいけないわけで、メイク・ブレイクが
拾いやすい代わりに、普通の入力の設定が少し面倒かもしれません。

>  修正しておきました。ただ直すのでは面白くないので、ちょっと機能を上げて
>おきました。 http://www1.odn.ne.jp/~aaf27410/MOSkey03.lzh にあります。

  早速ダウンロードしました。

  ソースを見て思ったのですが、シグナル定義が長くなってきたので、

    static struct {
        int len, keyid, signal;
    } table_defsig[] = {
        {  1, KEY_LEFT   | MAKEEVENT,  CURSOR_LEFT      }, // カーソルキーのメイク
        {  0, ' '        | MAKEEVENT,  PORTAMENTSIGNAL  }, // スペースキーのメイク
        {  0, KEY_ALT    | MAKEEVENT,  HOLDONSIGNAL     }, // ALTキーのメイク
        {  0, KEY_ALT    | BREAKEVENT, HOLDOFFSIGNAL    }, // ALTキーのブレイク
        { 79, '0'        | MAKEEVENT,  MAKESIGNAL       }, // 文字キーのメイク
        {  0, KEY_ESCAPE | MAKEEVENT,  MAKESIGNAL  + 80 }, // Escapeキーのメイク
        {  2, KEY_ENTER  | MAKEEVENT,  MAKESIGNAL  + 81 }, // Enter,Bs,Tabキーのメイク
        {  1, KEY_SHIFT  | MAKEEVENT,  MAKESIGNAL  + 84 }, // Shift,Controlキーのメイク
        { 79, '0'        | BREAKEVENT, BREAKSIGNAL      }, // 文字キーのブレイク
        {  0, KEY_ESCAPE | BREAKEVENT, BREAKSIGNAL + 80 }, // Escapeキーのブレイク
        {  2, KEY_ENTER  | BREAKEVENT, BREAKSIGNAL + 81 }, // Enter,Bs,Tabキーのブレイク
        {  1, KEY_SHIFT  | BREAKEVENT, BREAKSIGNAL + 84 }  // Shift,Controlキーのメイク
    };
    for (int i = 0; i < (sizeof table_defsig / sizeof *table_defsig); i++) {
        lib_definesignal1p0(table_defsig[i].len, 0x100,
            table_defsig[i].keyid, window, table_defsig[i].signal);
    }

なんていうのはいかがでしょう。

>  そういえば、TOWNSの昔のキーボードにはALTキーがないんですよね。そう思っ
>てキーボードを眺めていたら、全部のキーが検出したくなってきました(笑)。

  まず昔のキーボードにはALTキーがないという問題ですが、それは確
かに事実なので、上記宣言に、

        {  0, KEY_INSERT | MAKEEVENT,  HOLDONSIGNAL     }, // Insertキーのメイク
        {  0, KEY_INSERT | BREAKEVENT, HOLDOFFSIGNAL    }, // Insertキーのブレイク

を追加しておくというのはどうでしょう?こうすれば、AltでもInsert
でも同じシグナルが発生するようになります。まあ、こういう配慮を
しなくても将来のOSASKではユーザーがアプリのキーバインドをオーバ
ーライドして設定できるようになるので、心配はいらないのかもしれま
せんが(笑)。

  全部のキーを検出したいということでしたら、対応してもいいですよ
。winman0.cの関数sgg_wm0_definesignal3sub()内のテーブルをこそこ
そといじるだけなんですから(笑)。


  それでは。

--
    川合 秀実(KAWAI Hidemi)
川合堂社長 / OSASK計画総指揮 / カーネル開発班
E-mail:kawai !Atmark! imasy.org
Homepage http://www.imasy.org/~kawai/