2018年05月11日

【薙刀式】薙刀式史上最高の出来栄え

同時打鍵ロジックを変えてみました。
配列自体は同じです。

薙刀式v6Beta.txt

ざっくりいうと、

A+Bの同時打鍵を、「〇ミリ秒以内にABを二つ押す」から、
「どっちかを押しながらもう一方を押す(逆順OK)だけ。
速くやるときは、双方が同時に押されている瞬間があればOK」

としました。
(センターシフトはスペース先押ししか出来ず。これはDvorakJの仕様)

同時打鍵が苦手な人でも、わりと簡単に打てるのではないでしょうか。


以下同時打鍵の詳説。


実装しているDvorakJの同時打鍵判定は、
「〇ミリ秒以内にABが押されたら同時と判定」
がデフォルトです。

どっちが先に押されても、
同時に押されている時間帯が仮になくても、
離す順番が後先変わっても、
関係ないという、
「Aを押した瞬間とBを押した瞬間の差だけを問う」ものでした。


なんでこれがデフォかというと、
判定が簡単だからだと推測します。

離しも検知して、押した瞬間と比較して、などの必要がない、
シンプルな(つまりは高速な)判定ができるからだと考えます。


しかしこれが厄介で、
高速打鍵ができるようになると、足かせになるんです。

具体的にいうと、
「ABと二つの文字を高速に打つと、A+Bの同時に化けてしまう」
のです。

高速打鍵では、Aを押したら、離す前にBを押す、というロールオーバーが起こります。
ローマ字などでは、離しの判定は必要ないため、
これを利用して高速に打っていくことができます。

しかし同時打鍵判定があるとそうはいかない。

同時を避けてABと打ちたいときは、
「微妙に(〇ミリ秒以上)待つ」が必要になります。

本当の所は、
「ABに同時が定義されている所はゆっくり打つ」
「同時が定義されていない所はいくらでも早くロールオーバーする」
を使い分けるのがベストですが、
一々考えるのが困難なので、
どうやっても「ちょい待つ」をやってしまい、
高速打鍵が頭打ちになるんです。


〇ミリ秒の単位を短くすると待ち時間を減らせるけど、
今度はA+Bの同時判定がシビアになる。

これは同時打鍵が「押された瞬間だけで判定する」
という方法でやる以上、
避けられない問題でした。



具体的にいうと、
僕は最近まで、〇を50ミリ秒あたりに設定していました。

しかし遅さに苛々するようになり、
〇を30、25と短くして使っていました。
でもまだ遅くて、
ついに10で使っていました。

これくらいの待機秒数だと、
単打の流れはローマ字並みにロールオーバーが可能になります。

ローマ字の入力がどこまででも速くなれるのは、
この「ロールオーバーがどこまででも詰められる」
という性質によるものです。
キーボードが対応しているなら、マシンの処理速度限界まで間をつめられるはずです。

しかし同時打鍵配列はそうはいきません。
〇ミリ秒以下のロールオーバーは、同時とみなされてしまいます。

打鍵速度が「指がしゃべる」速度あたりまでは、
これはたいした問題となりません。

しかしそれを越えて、分220カナ以上くらいになってくると、けっこう効いてきます。
自分はもっと速く打てるのに、
同時打鍵に化けてしまうからゆっくり打たないと、
という打鍵に変わってきます。


もちろん同時が定義されていないところは、
ロールオーバーしてどれだけでも速く打てますが、
「同時打鍵の定義されている所とされていない所を、
速さを変えて打ち分けていかねばならない」
という変則が要求されることになります。

タイピングゲームなどでは単語で運指を変えていけば済みますが、
実戦ではそうはいきません。

文章を考えるので精いっぱいな状況で、
同時打鍵がここは定義されているだろうか/いないだろうか、
を考えてまで文字を打っていくのは困難だし、
それは文章の質を下げるでしょう。

いきおい、「一番遅い所に合わせる」
という安全策で打っていくことになります。

これが打鍵速度の頭うちの原因でした。


特に薙刀式は色々な同時打鍵が組み合わさっているので、
いちいち考えるのが面倒、という事情もあります。
(「いう」が「うぃ」に化けるのは分っても、
「なら」が「ふぉ」に化けるとはなかなか予測できない)

これまでは〇ミリ秒を短くすることで打鍵の滑らかさに対処してきました。
それが10になるに至って、
こんどは同時判定がシビアになりすぎていました。

でも僕は、もっと速く打ちたい。



で、同時打鍵の判定方法を変えることにしたのです。

A+Bの同時を、
「Aを押しながらB、またはBを押しながらAとする」
実用上は、
「ABが同時に押されている瞬間があれば同時打鍵とする」
というものです。

DvorakJの判定としては、-24などとなっているところを+24などにする方法です。
「真の同時押し」というやつです。
しかしこれは、ABとBAの両方の定義を書かなくてはいけません。
プログラムが膨大になり、バグ取りが結構大変なことになります。

僕がこれを避けてきたのは、
一回この迷路をつくってしまったら、
気軽に改造できなくなるだろうなあ、
と考えていたからです。
事実、ソースをみるとわかりますが、けっこうな複雑さです。
見た目でなにをしているかわかりやすい、DvorakJの良さが台無しです。
配列がそろそろ固定になってきたかな、
というこのタイミングで、
真の同時押しにロジックを変えてみるとどうだろう、
という興味もありました。


で、やってみたというわけ。

結果は、薙刀式史上最高に打ちやすい感触になりました。

10ミリ秒では、同時打鍵は5回に1回くらい失敗していました。
これを鍛えるしかないか、なんて思っていたら、
このロジックにしたら100%ミスなし。


なんだ、最初からこれをしていればよかった。

(しかしソースを見ればわかるように、
容易に改造を拒む、迷路になっている……。
これだったら、簡単にバージョンアップしたり、
アイデアを試しながら配列をつくることはできなかったと思う。
そろそろ固定時期が来たから、ようやくできたようなもの)



もし同時打鍵配列が苦手で、
やっていなかった人、
今回の薙刀式をためしてみてください。

どんなに遅く打っても、
最悪一方を押しながらもう一方を押しても、
同時判定となります。

しかもすごいのは、3キー同時押しでもこれは可能なこと。
「3つが同時に押されている瞬間があれば同時」とみなすので、
わりとゆっくり打っても大丈夫です。



いやいやいや、薙刀式に革命かもしれない。

とりあえずしばらくこれを走らせてみて、
問題なければ、もうこれを正式なバージョン7として、
マニュアルの同時打鍵の項目を全面的に改正することになりそうです。



ただし、
「スペースキー押しながらの他2キー3キー同時押し」
は、DvorakJの仕様上、「いくらでも待って同時押し」ができず、
従来の同時押しロジックに化ける模様。
なので、待機秒数を0にはできず、僕は5で使っています。


ということで史上最強の薙刀式、リリース。
(とりあえず試用版とします。
本格的にはマニュアル書かないといけないので)

同時打鍵が無限にやりやすくなった!
posted by おおおかとしひこ at 10:57| Comment(0) | カタナ式 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

※ブログオーナーが承認したコメントのみ表示されます。