« コンポーネントの重ね合わせが驚くほど簡単である、、、これはすごい | メイン | UJMLサンプル130:ボタンの同時押し用コンポーネントを作る カーソルのようなものを表示 »

UJMLサンプル129:ボタンの同時押しを処理するコンポーネントを作る(128の続き)(2006/06/16)

Samples_129_keyupdonw 前回の、

UIEngine だ: UJMLサンプル128:KeyUp & KeyDown

に引き続き、ボタンの同時押しを処理するためのコンポーネントを作りながらUJMLの紹介をしていく。前回のサンプルはどのボタンに対しても画面の再描画処理が行われたが、今回はカーソルキーのみで反応するように変更した。

 新たに使用したのはUJMLの組み込み関数である _streq() である。これは、二つの文字列を比較する関数で覚えておくべきものの一つである。

_getStringEventData(&_EVENT_STRING_ONKEY;);

で得られたキーの文字列が何かを判定し、カーソルキーなら画面の再描画処理をするようにした。太字参照。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ujml PUBLIC "-//UIEVOLUTION//DTD UJML 1.5//EN" "../ujml.dtd" [
]>

<!-- http://uienginda.blogs.com UJMLサンプル129:KeyUp & KeyDown を作っていく -->
<ujml>
    <application>
        <state-variables>
            <state-var name="sLabel" type="boolean"/>
        </state-variables>
        <variables>
            <var name="mLabelText" type="string"/>
        </variables>
        <script>
            sLabel = true;
        </script>

        <states>
            <state var="sLabel">
                <transition value="true">
                    <display>
                        <label>
                            <text><eval>mLabelText</eval></text>
                            <fg>&_COLOR_WHITE;</fg>
                            <bg>&_COLOR_BLACK;</bg>
                            <size>&_FONT_SIZE_SMALL;</size>
                        </label>
                        <box>
                            <event name="onKeyDown">
                                <variables>
                                    <var name="key" type="string"/>
                                </variables>
                                <script>
                                    key = _getStringEventData(&_EVENT_STRING_ONKEY;);
                                    
<!-- カーソルキーのみで処理をする -->
                                    if(_streq(key,"UP") || _streq(key,"DOWN") || _streq(key,"RIGHT") || _streq(key,"LEFT")){
                                        mLabelText = _strcat(
"KeyDown:",key);
                                        _clear_state(sLabel);
                                        sLabel = true;
                                    }
                                </script>

                            </event>
                        </box>
                        <box>
                            <event name="onKeyUp">
                                <variables>
                                    <var name="key" type="string"/>
                                    <var name="flg" type="boolean"/>
                                </variables>
                                <script>
                                    key = _getStringEventData(&_EVENT_STRING_ONKEY;);
                                    
<!-- カーソルキーのみで処理をする -->
                                    if(_streq(key,"UP") || _streq(key,"DOWN") || _streq(key,"RIGHT") || _streq(key,"LEFT")){
                                        mLabelText = _strcat(
"KeyUp:",key);
                                        _clear_state(sLabel);
                                        sLabel = true;
                                    }
                                </script>

                            </event>
                        </box>
                    </display>
                </transition>
            </state>
        </states>
    </application>
</ujml>

次回以降もこのような感じでお送りする予定だ。途中で他のサンプルが入るかもしれないが。

UIEngine/UJML 初心者の方にお勧めのページ:
初心者向けまとめページ
初心者向けカテゴリ

その他の初心者向けのサンプル:
UJMLサンプル052:超基礎:HELLO WORLD! その1
UJMLサンプル053:超基礎:HELLO WORLD! その2 文字の色を指定
UJMLサンプル056:超基礎:HELLO WORLD! その3 文字の色を指定 ENTITYを使う
UJMLサンプル057:超基礎:HELLO WORLD! その4 文字の色を指定 変数から文字の色指定をする場合
UJMLサンプル091:超基礎:HELLO WORLD! その5 ラベルの背景も指定する

トラックバック

この記事のトラックバックURL:
https://www.typepad.com/services/trackback/6a00d8341c2e2e53ef00e55094b3fc8833

UJMLサンプル129:ボタンの同時押しを処理するコンポーネントを作る(128の続き)を参照しているブログ:

コメント

この記事へのコメントは終了しました。