追加案: ホイール操作中のマウスカーソル微動への対策

Issue #513 resolved
k4nagatsuki repo owner created an issue

Issue 497の一連のコメントを参照してください。

この問題をCWPy側で解消するには、ホイール選択が行われている時には一定時間、あるいは微動程度の動きではカーソル移動を検知しないようにする必要がありそうです。

ただし、それにより、たとえば以下のような操作ができなくなるという問題があります。

  • ホイールでカードを選択中、やはりカーソル下のカードを選択しようと思ってカーソルを少し動かしすぐにクリック
  • ホイールでカードを選択中、背景を右クリックする必要が生じてカーソルをすぐに動かし右クリック

すばやく操作する人であるほどこれらの問題に遭遇しやすくなります。

タイマーの時間・どこまでを微動とするかの距離も、おそらくマウスによって個体差があります。

また、対策を打ったとしても、CWPy単体で解決できる問題ではありません。私としては、これは根本的にはマウスとマウスドライバの問題だと思います。


とはいえ、クリックする時にブレるなどという事も考えられるので、さしあたって以下のような処理を入れ、隠し設定で有効にできるようにする事を考えています。

  1. ホイールでスプライトが選択されたら、その時のマウスカーソルの位置を記憶する。
  2. その位置から縦+横でNピクセル以上動くまではカーソルによる選択モードに移行しない。

ホイールを操作するたびに1.を実行する事で、1回動き、しばらく経ってからまた動いて、結果的に元の位置から離れすぎて選択モードが変わる、という事故を防ぎます。

この方法のいい所は、タイマーと違って素早い操作に対応できる事です。ユーザは、意識してカーソルをNピクセル以上動かせばよいのです。

Nの値が隠し設定で、基本は0になるかと思います。もし、今回の現象で困っている人が何人もいるようだったら、設定ダイアログにも追加する事を考えます。

Comments (26)

  1. k4nagatsuki reporter

    判断がN < 縦+横では移動範囲がひし形になってしまいますね。

    カーソルの元の位置を(Xn, Yn)、現在位置を(An, Bn)として、N < hypot(abs(Xn-An), abs(Yn-Bn))の時に移動を検知、でしょうか。

  2. Liar_cw NA

    私も今回の件は、マウスとそのドライバと使用環境その他の問題だと思います。 CWPy側で解決できる問題とは とても思えません。

    どんな理由(ブレやマウス)にしてもタイマーにしてもピクセルにしても、 今度は「反応が悪い(待つのがだるい・動かすのがだるい)」といった不満に変わる事が想像できます。 いえ、想像してしまいます。

    機能があるから目に付いてしまうのでしょう。 「ホイールによる選択機能の無効化」オプションの追加を視野に入れられてはと愚考します。


    以下は蛇足です。パッと思いつく物理的な原因です。

    1. マウスそのものの大きさ。考えるまでもなく、小さなものほど力が掛かりやすくかっ飛びやすい。
    2. マウスを使用している環境。マウスパッドや机から膝の上など様々。誤作動の原因のひとつに「埃の巻き込み」もある。
    3. マウスの損耗具合。新品ほどホイールは硬い。ついつい力を掛けてしまいがち。
    4. マウスの種類。無線か有線か等。トラックボールなんてものもある。
    5. マウスの特殊機能。ホイールの引っかかりを無くすものもある。
    6. その他、パソコンの状態や環境設定など。
  3. jinto_

    自分機能があるから目に付いてしまうのでしょう。 「ホイールによる選択機能の無効化」オプションの追加を視野に入れられてはと愚考します。

    自分の思ってることそのままです。

    元をただせばホイール操作でカーソルが微動するということを想定せずに導入してしまったことに問題があるのだと思います。
    導入前に想定できていれば導入はなしになったか、そうでなくともかなり慎重に扱われたのではないでしょうか。
    元々が問題のある機能なのです。

    それに対して前に向かって(その機能を肯定して)解決を図ろうとしても、ピタッと上手く行かせるのは至難の業ではないかと思います。
    今回のNピクセル以上動くまではカーソルによる選択モードに移行しない。にしても、これはNの設定が難しいです。
    微妙に動くのは毎回でも、動く幅は常に違います。
    ホイールを慎重に動かせばほんのちょっとですが、高速で動かせばかなり動く時があります。
    前者の設定で行くと、毎回慎重なホイール操作が要求されます。
    後者に対応させると操作性がかなり悪化します。
    どちらにしてもストレスです。
    そしてそこまでして使いたい(プレイにどうしても必須な)機能でもありません。

    今回は後ろに向かうこと、その機能を使えない環境の人にはその機能自体が意識されない状態を提供するのが一番良さそうに思えます。

  4. 暗黒 騎士

    CW1.28/1.50のキー操作でのフォーカス+マウスの微動を検証した結果、

    CWではポインタが微動した場合、フォーカスはリセットされないが、エンターが無効になり、方向キーを押すとはじめのカードから選び直しになり、また、ポインタがフォーカス範囲になくてもマウスの右左クリックが有効になる(全く動かさない場合は効かない)ようです。 (要は、おそらく「アクティブな操作デバイスはどれか」というような排他的な処理をしているため、 方向キーの操作でフォーカスを合わせてマウスでクリックするには、むしろカーソルを微動させてマウスをアクティブにする必要があり、結果的に長月さん案のようなクッションが生まれている)

    長月さん案を採るのであれば方向キーでも同様な処理にした方が良いかもしれません。(フォーカスしている最中で、クリックしたくなりブレるというのは方向キーでも起こりえるので)

  5. Liar_cw NA

    どのような対処をされるにしても CWPyの元々の操作性を損なわないのであれば、と思います。 微動現象で困っている方がいれば、困っていない(対処される事で逆に困る)方もいます。

    あまりこういう事は言いたくはないのですが、 事ある毎に「元に戻してください」と発言する側にもつらいものがあります……。

    • 余談になりますが、ホイール(クリック)操作でカーソルが微動した経験は私もありません。
  6. k4nagatsuki reporter

    入れようとしている隠し設定は、Nが0であれば従来と同じように動きます。Nの値をユーザが選ぶ事で調節が効きます。が、「かなり動く」のであればそれでも難しいかもしれません。

    今回は後ろに向かうこと、その機能を使えない環境の人にはその機能自体が意識されない状態を提供するのが一番良さそうに思えます。

    ホイールに触れなければ機能しないわけですが、そのオプションは必要でしょうか? 実際にカーソルが微動するという環境はどれくらいあるのでしょう。

  7. k4nagatsuki reporter

    朝方には読み飛ばしてしまったのですが、ちょっと確認させてください。

    微妙に動くのは毎回でも、動く幅は常に違います。 ホイールを慎重に動かせばほんのちょっとですが、高速で動かせばかなり動く時があります。

    これはマウスが動いていないのにカーソルが動くという事でしょうか? それとも物理的にマウスが動くという事でしょうか?

    前者だとすればマウスドライバの問題を疑うべきですし、後者であれば、マウスの裏のすべり止めが機能していなかったり、マウスパッドとの相性が悪い事が考えられます。普通はホイールを回転させることでマウス本体が大幅に動いたりはしません。マウスパッドの試行的な代替品――例えばコピー用紙、新聞紙、ダンボールなど――は試されたでしょうか?

    あるいはホイールがマウス本体を動かしてしまうくらいの振動を発生させるという事でしょうか?

  8. jinto_

    返事が遅れましたが、

    これはマウスが動いていないのにカーソルが動くという事でしょうか? それとも物理的にマウスが動くという事でしょうか?

    うーん、後者だと思います。
    ホイールをクルクルしてるとその力でちょこちょこ動くようです。

    普通はホイールを回転させることでマウス本体が大幅に動いたりはしません。

    そうですね。
    実際大幅に動いてるというわけではないです。(適切な表現の難しさ)
    ただ、微動というよりズレるように(これはカーソルで見て)動くこともあります。
    試してみたのですが、1.50で方向キーでカードを選択状態にしてホイールをくるくるしてみると、普通に解除されるぐらいは動きます。

    マウスパッドの試行的な代替品――例えばコピー用紙、新聞紙、ダンボールなど――は試されたでしょうか?

    コピー用紙でも動きますね。
    それ以前にこの上で作業をしたくないです。
    ポインターの速度を遅くしてものそっと動きます。

    あるいはホイールがマウス本体を動かしてしまうくらいの振動を発生させるという事でしょうか?

    そうとも言えます。
    ただホイールに問題があるのではなく、ホイールを動かす力でマウス本体が動いてしまうのです。

    この件に関して、自分はホイールによる選択機能の無効化オプションの追加が良いと思っています。
    ただ自分の経験してることがかなり特殊なら、Nの値をユーザが選ぶ事で調節するより今まで通りで自分が気にしなければいいというのもありだと思っています。
    それでも自分は構いません。

  9. jinto_

    これが原因なのか確信があるわけではないですけど、もしそうなら
    Amazon 売れ筋ランキング
    パソコン・周辺機器 - 80位 (ベストセラーを見る)
    6位 ─ パソコン・周辺機器 > キーボード・マウス・入力機器 > マウス
    なのでそれなりの数の人が経験しそうです。
    そうでないなら自分だけの特殊な事態と言えるのではと思います。

    それと暗黒騎士さんの

    Pyのホイールのフォーカス移動の中断判定は過敏すぎると感じていました。

    ゲーミングマウスのようなDPIの高いマウスを使っているユーザーの環境ではクリック等でポインタが微動するのが普通だと思ってました。

    これらは別の問題として考えるべきかなと思います。
    自分はゲーミングマウスは使ったことないし、クリックでポインタが微動するというのも分からないので。

  10. k4nagatsuki reporter

    ホイール選択無効オプションについてですが、これが一般的な問題で、しかも機能の存在自体が邪魔になる状況であれば、追加もやむを得ないといえます。

    しかし、他に問題が出ているという意見はありませんし、気にしない事も可能というのであれば、追加しない方がよいと私は思います。

    たとえ追加したとしても、使用者がほとんどいないかもしれず、その使用者も将来マウスを買い換えると共にオプションが不要になるかもしれず、そうなると誰も使わない不要なオプションが設定ダイアログの一角を専有するという事態になるからです。

    ホイールによる選択を無効にするオプションで解決を図るという提案は2人から出ていて、反対しているのは私1人なので、その方向に進むこと自体は仕方ありませんが、私としては最初は隠しオプションとして実装する事を希望します。


    移動量が一定以上のときのみ選択モードを解除するという工夫ですが、これはクリックしようとしてボタンに指を伸ばした時にマウスを少し動かしてしまう、という問題の解決も含めての提案です。これは私も稀に経験する事故です。

  11. jinto_

    使わなければいいというだけなので、無効化の追加を強く要望という気はないですね。
    普通にプレイするならたぶん自分は使わないので、無効化してもらって気にしないか、使わないで気にしないかの違いだけです。

    追加
    ただ一貫してnagatsukiさんはホイール操作でカーソルが移動するのがおかしいという立場で、自分はそんなの普通でしょ、という立場だったのでこの点は一致することがなかったところです。
    後者の立場からすると問題の多い機能なんだということは言っておきたい…。

  12. k4nagatsuki reporter

    後者の立場からすると問題の多い機能なんだということは言っておきたい…。

    その問題は認識していますし、解決方法も提案しています。実装がここまで遅れたのは想定外でしたが、pull request #1850でカーソル移動不検出の移動半径を指定する隠しオプションを追加しました。

    Settings.xmlを開き、<Settings dataVersion="3"></Settings>の間の適当な行に、以下のような行を追加すれば有効にできます。この例では、方向キーやホイールでの選択中は、5ピクセルまでのカーソル移動を検知しません。

     <RadiusForNotDetectingCursorMovement>5</RadiusForNotDetectingCursorMovement>
    

    実際に試してみながら、値を調節してみてください。問題が解消されるかもしれません。

    編集ミスで壊れる可能性があるので、Settings.xmlはバックアップを取っておいてください。

  13. jinto_

    追加の仕方はどこが間違ってるのでしょうか。
    WS001070.JPG
    WS001071.JPG
    エンジンを起動しても反映されず、閉じた後このメッセージが出ます。 WS001072.JPG

    CardWirthPy 2.0 Alpha 4
    Build: 2017-04-22 11:26:06
    
  14. 暗黒 騎士

    jinto_さん

    そのメッセージは編集中のファイルが書き換わりました、再読み込みしますか?的な確認のようですね。 多分Pyを閉じた時にXMLが更新されて、お使いのエディタが開きっぱなしになっていたのでその確認が出たという流れで、(100とか極端な数値を入れても明らかに反映されていないのであれば、)Settings.xmlを正しく上書き保存できていないんじゃないかと思います。 別のテキストエディタで試してみるのはどうでしょう。

  15. 暗黒 騎士

    あ、あとSettings.xmlの編集はPyを終了させた状態で行わないと駄目です。(起動時に読み込み、終了時に書き換わるので)

  16. Liar_cw NA

    >@k4nagatsukiさん、

    まさに様々な意味で泥沼となるのが目に見えていましたので、後にも先にもスッパリと切り捨てる意味でも早めに機能の無効化を提案させていただきました。 物理的な問題を多く含む分、今更ですが不毛な類の話とすら思っています。

    普通なら、「動作環境の想定外です。マウスを買い換えてください」 「落ち着いて操作を行ってください」で済んでしまう話です。

    機能無効化の見送りに異論はありません。が、 一度何かに悩まされると暫くそれが付いて回ってストレスが半端ない事になるのは想像に難くありません。 一時の感情だけで済ませるような事ではないのもまた確かです。 私は@k4nagatsukiさんのご判断に従います。

  17. jinto_

    ありがとうございます。
    XMLEDITOR.NETにしてみたらあっさりできました。

    5でも実用的には問題ない感じでした。
    ホイール操作の速度を上げていくと解除されるけど、そういう操作をすることは実際の場面ではまずないでしょうから問題なしかなと思います。
    試しに30まで広げてみましたが、これでも特に操作のストレスは感じなかったです。
    もっと使いにくくなるイメージをしてたのですが、自分の勘違いだったようです。

  18. k4nagatsuki reporter

    ご確認ありがとうございます。とりあえずこれで解決と見てよいでしょうか。

    あとは、このトラブルがどの程度一般的に発生しうるかが問題です。少なくとも新しいオプションを使わないとホイール選択が機能しない人が4人中2人いました。さすがに座視できない割合です。

    さしあたっては今の状態でいいかと思いますが、もう1人でも同じ問題に悩まされている人が現れたら、今回の設定を設定ダイアログに追加する事にします。

    実装してみて思ったよりも有効に動く事が分かったので(ホイールなどを使っている時はカーソルの移動は意識的に行うので引っかかりを感じにくい)、後々はデフォルト値を5くらいにしてもいいかもしれません。

  19. jinto_

    今更ですが今回は自分の考えに固執しすぎて問題を複雑にしてしまいすみませんでした。
    元をたどると機能に対する不快感・悪印象がかなり強くて、もう見たくない・意識したくないという気持ちから否定的な方向に走りすぎたと思います。
    間違った意見でしつこく喰らいついて、ご迷惑をおかけしました。

    マウスが電池入れると50gちょいぐらいの軽量マウスだとホイール操作でカーソルが移動するのは普通になるのだと思います。
    他にもっと深刻な人もいるかもしれないけど、自分の環境では5で概ね満足ですと改めて言っておきます。

  20. k4nagatsuki reporter

    インタフェースは一人に合わせるために他の一人を犠牲にしかねない分野なので、できるだけ一人一人が、自分だけでなく、自分を含む大勢の事を考えるようにするべきですね。これが実に難しいのですが。

    私も最近ツールチップの件などでやらかしたばかりですし、気をつけます。

    私も以前はかなり小さなマウス(たしか当時のエレコムの一番小さいやつ)を使っていた事があるのですが、ホイール操作でカーソルが動いたというのは記憶に無いです。ホイールの操作感自体が軽かったせいかもしれませんが、実際のところどうなのでしょう。もっと事例が集まらないとなんとも言えないですね。

  21. jinto_

    同じマウスを買って試してみたのですが、やはりホイール操作でカーソルは動きました。

    自分のように超小型マウスを好む人はいるし、クリック時の微動対策にもなるし、正式になればその後一年以上は大半のユーザーはそちらに流れるので、個人的には2.0に実装していただきたいです。

  22. k4nagatsuki reporter

    できれば超小型でないマウスでも動くかどうか確認していただきたいのですが、お持ちでしょうか?

    マウスが小型なのが原因である事が確実であれば、そうしたマウスに対応するためのオプションの存在に納得しやすいです。

  23. Log in to comment