Repo

kjana00@gmail.com

older <-

2013-03-23 00:55:21

今朝は晴れ。朝ごはんはパンとサラダとソーセージ。桜がちらほら咲き始めて、もうちょっとしたら満開かなという今日この頃。そう言えば最近梅林とか桃園とかばら園とか見に行ってないよな……余裕の無い。

何かこれ使うにはカーネルモジュールが足りないっぽいんだけど、この環境だとどうするんだっけと調べもの。バイナリパッケージがあったりしないもんだろうかと。で、見当たらないなと悩んでるところにまた別件の話が。その辺りの仕様も実現しますか、はあ。上手く行けば全然難しくない上に、今ちらっと見た限りでは上手く行きそうな感じのコードになってるようですけど。

……ということで簡単に直りそうなところを簡単に直すところから。スライダーの脇に並べたチェックボックスをチェックすると、対応するスライダーにカーソルキーが効くようになるっていう仕様。で、チェックボックスは排他だし、チェックしたらスライダーにフォーカスするのもやって欲しいとか。フォーカスするの自体は前に別のコードで実験して出来るのがわかってる。排他的にするのは、コールバック呼ぶ時に同じグループ内の他のチェックを外せばいいでしょう。ボタングループ使えば勝手にそうなるっぽいけど今、それを実験してる余裕無いし……

で、簡単に作って、しばらく間抜けなミスをしてチェックした瞬間にチェックが外れるよと悩んでみたり。ループ変数じゃない変数を添字に使っていじってればそうなるわな。それでちゃんと直して上手く動くのを確認。モーダルダイアログなツールにも同じようなスライダー群があるんで同じコードをコピー。そしてすぐにこんなコードの複製は嫌だと分離することを考える。今さらファイルが増えるのを嫌った結果、スライダーパネルを作る関数のサブ関数でコールバックを実現。このチェックボックスのコールバックは排他性の実現と対応するスライダーにフォーカスするっていう機能の実装だから、他のところを見ないでいいんでこれで大丈夫。スライダーのコールバック自体はチェックボックスの状態を直接見るし。

それからあんまり簡単じゃない方の問題を解決するべく調査。チェックボックスをチェックしてなくてもデフォルトのキー操作の方が効いてしまって、その時にはスライダーのキー操作コールバックの中で何もしないからスライダーの値とエディットボックスに出してる値がずれるっていう。現象を見ているとどうもファインチューンツールで上下キーでのスライダー操作がおかしいっていうのと同じタイミング問題に見えたんで、多分これを解決すればどうにかなるでしょうとやってみる。

スライダーのキー操作コールバックが呼ばれるタイミングと GUI 側で値が変わるタイミングがどうも一定していないから、キー操作コールバックで強引にデフォルトのキー操作とは違う値になるように設定する部分で使う元の値がずれてしまう。速いマシン、もしくはネイティブ環境ではキー操作でスライダーが動く前の値が拾えてるんだけど、遅いマシン、もしくはスタンドアローンアプリケーションでは動いた後の値が拾えてる。ということで、スライダーの値をセットする時に実際にセットされた値を UserData で持っておくようにしてみた。他で持つと使い方が異様に面倒臭くなるし…… UserData 使うのは何か負けな気がするということでやってなかったんだけど、最初からこっちで書いておけば良かったかも。

キー入力で KeyPressFcn が呼ばれて、その中でスライダーにセットする値を UserData に保存してある現在値から計算する。次にデフォルトの低レベルコールバックのせいでスライダーが動くんで Callback の方が呼ばれるから、KeyPressFcn で計算して UserData に保存しておいた値をスライダーの Value に set する。UserData に現在値を保存して、KeyPressFcn による計算値の方はリセットしておく……というので概ね動くんだけど、スライダーのノブが両端にある場合の上下キーに対する動作が怪しい。本来上で左に、下で右に動くのを上で右に、下で左に左右キーの 10 倍のステップで動かすっていうのを実現してるせいなんだけど…… KeyPressFcn 呼ばれても Callback が呼ばれない場合が出て来て、そのせいで KeyPressFcn が設定する値が残るから二回押さないと次の値に行かない場合があるっていう。しばらく何とかならないかと悩んでみたものの、どうにもならなかったんで結局 KeyPressFcn 内で二回同じ UserData を set しておくというみっともない解決策に落ち着いた。

ということで片付いたことにして、この環境でもカーネルモジュールのバイナリパッケージなんぞ無い……と言い切ったものでもないけど今求めてる特定のモジュールについては無いということがわかったんでカーネル再構築周りを調べたり、ちょっと手を付けたりしつつ終わる。

すっかりくもっちゃってまあという感じの下帰って、パン少々とカマンベール食べてから晩ごはんを作って。で、カレー。残ってるねぎを入れてしまおうかというのは、白いところだからそんなにすぐには痛まないよということで自重。でも細竹は入れてみたりして。水分多めなところからふたをしないで弱火で煮込んだから大きめの肉がちゃんと柔らかく煮えた。おいしい。

のんびりしてるところに電話。何か何度目かのこれでおしまい、と思ったあれについての問い合わせがあったとかで。それでメールを転送してもらってそこは 1 サンプル 1 秒だから単純にサンプル数で割ってます、それで /s な単位だしとか、その修正を back out したら単に元も間違ったコードに戻るだけだから当然問題ですねとか答えておく。割といい加減にしてもらいたいところな感じ。

後は WWW 見たりゲームしたりまんが読んだり。そういえばまだだったっけと柳じじいを倒してみたけどあんまり大層いいものは手に入らなかったよ、というぐらいな感じの進行。闘技場で獲得の巻物を手に入れたけどそれで出て来たのは使えない武器だったりするし。12 階のランダムクエスト行っちゃうかな、もう。見えない敵が守護者に指定されててどうしようもなくクエスト失敗っていうのが恐いんだけど。

明日は朝から出掛けるんだからもう寝てもいいのよ、とかな。思わず勢いで直接柏木に行っちゃわないようにしないとね。今回は一次会会場は別なんだから。

older <-

goto

hint can be:

Tags

old

2007-05 -- 2006-12

ゲーム関係の古い記録

before 2005-12