投稿

5月, 2022の投稿を表示しています

基本的な知識がないので

とにかくいろんな所で引っ掛かります。 例えば、ゲーム中にキーボードのAを押すとテキスト入力ボックスを表示させたい時に、     const input = document . createElement ( 'input' );     document . addEventListener ( 'keydown' , ( e ) => {       if ( e . key == "a" ) {         document . body . append ( input );         input . focus ();       }     }); こんなjavascriptを書いたとしよう。(このままではアレだがあくまで例として) すると、テキスト入力ボックスの初期値(のように見えるモノ)が、空白""ではなく、"a"になってしまう。 ちょっと考えれば、input.focus()が原因であることはわかるが、どうも直感的ではないような。 キーボードのAは、keydownイベントを発火させるために押されているのに、そのあと有効になったはずのテキスト入力ボックスにまでAが入力されてしまうのは、すごくモヤモヤする。 (詳しい説明はしないし出来ないが、イベント発生の順番がkeydown=>input=>keyupなので、keydown中はinput.value==""なのだが、keyup中はinput.value=="a"になっている) で、なんでinput.focus()が必要だったかと言えば、フォーカスがないといちいち入力ボックスを選択しないといけないからで、なおかつiframe内だとautofocusが効かないという、そっちはそっちでモヤモヤする話なんだよなぁ…。 というように、何かあるたびに時間を浪費しまくった今回のGW期間だった訳だが、有意義だったのかどうか。

長期連休の恒例

放置さんはドライブがほぼ唯一の趣味ではあるのだが、渋滞がこの世の中で一番嫌いと言ってもいいぐらいなので、長期連休時に車で遠出をすることはあまりない。 で、結局家にいることが多いのだが、何をしているかというと、プログラムを書いているという事がほとんどだ。 別にそれが仕事だったり、新しい言語を習得したり、という事でははないのだが、まぁ、なんとなく有意義なことをしているような気がしてくるから不思議だ。 で、今回はNode.js + socket.ioを使って、ネットゲーム(のようなもの)を作ることにした。 実は、何年か前に全く同じことをしたのだが、それ以来Node.jsどころかjavascript自体ほとんど触っていなかった為に何をやったか忘れてしまっていたのだった。 当時書いたソースは残っているのだが、読み返してみても何がしたかったのかよくわからない。 どうやら当たり判定を四分木で何とかしようとしていたようだが、まったく高速化せずに訳が分からないコードになってしまい、そこで飽きたようだ。 というわけで、今回は高速化のことなど考えずに書いていたら、前回の自分にあっという間に追いついたのだった。 vscodeのintelisenseがなぜか日本語化できないとか(UIは日本語なのに)、canvasのgetContextは描画の度に取るべきなのかグローバルで持っておいてもよいのかとか、どうでもよいことで悩んだこともあったけれど…。 やはり自分は効率的なコードを書く事は出来ないので、スクリプト言語でひたすらベタなコードを書くのが向いているのだなと思うのだった。