質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Electron

Electronは、HTML5とNode.jsというWebの技術を用いてデスクトップアプリケーションを作成できるクロスプラットフォームな実行環境です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

0回答

446閲覧

JINS MEME イベントを無視する時間を作りたい

erua

総合スコア5

Electron

Electronは、HTML5とNode.jsというWebの技術を用いてデスクトップアプリケーションを作成できるクロスプラットフォームな実行環境です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2020/01/06 08:25

前提・実現したいこと

JinsMemeSDK(https://github.com/jins-meme/JinsMemeSDK-Samples-NodeJS/tree/master/jinsmeme-mouse)のコードの1部を変更し、視線移動を検知した時にマウスカーソルを移動させ続け、瞬きをしたときに移動停止させるようしています。

下記の問題を解決するために、一度視線移動を検知したら少しの間他の視線移動の検知を無視する時間を作りたいと考えています。

発生している問題・エラーメッセージ

視線移動(右)を検知した時にマウスカーソルが右に動き続けるのですが、その後視線を正面に戻した際にその視線移動も検知されてしまい、マウスカーソルが左の方に移動し始めてしまうという問題が発生しました。

該当のソースコード

全文だと長くなってしまうので左右の視線移動を検知した際のコードだけ記載させていただきます。

JavaScript

1//リアルタイムモードを処理する部分 2const realtimeModeCB_dev1 = data => { 3 4 var mouse = robot.getMousePos(); 5 let left = false; 6 let right = false; 7 let cm = 2; 8 let date_now = Date.now(); 9 10 var cmr = function() { 11 robot.moveMouse(mouse.x += cm, mouse.y); 12 migi = setTimeout(cmr, 250); 13 }; 14 15 var cml = function() { 16 robot.moveMouse(mouse.x -= cm, mouse.y); 17 hida = setTimeout(cml, 250); 18 }; 19 20 if (data.eyeMoveRight > 1) { 21 right = true; 22  console.log("Right"); 23 } 24 25 if (data.eyeMoveLeft > 1) { 26 left = true; 27   console.log("left"); 28 } 29 30 var jr = setTimeout(function() { 31 if (right == true) { 32 cmr(); 33 } 34 }, 1000); 35 36 var jl = setTimeout(function() { 37 if (left == true) { 38 cml(); 39 } 40 }, 1000); 41 42 if (data.blinkStrength > 40) { 43 // 瞬きを検知 44  right = false; 45 left = false; 46   if (migi != null) { 47 // 瞬きを検知、かつタイマーセット済みであればキャンセル 48   clearTimeout(migi); 49 migi = null; 50 } 51 if (hida != null) { 52 // 瞬きを検知、かつタイマーセット済みであればキャンセル 53   clearTimeout(hida); 54 hida = null; 55 } 56 }

試したこと

上記のコードにあるような視線致道を検知した後、マウスカーソルの移動を遅延させて実行させるということを試しましたが、発生した問題にも記載したような現象が1秒遅れて発生するだけとなってしまいました。

補足

調べている中でpreventDefaultやdisableといったものを見つけたのですが、これらは自分の実現したいことはできないのではないかと思い、試しておりません。
もし、これらを使ってもできるという場合はご教示いただけるとありがたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

oikashinoa

2020/01/06 23:18

イベントを無視させるのでは無く、イベント処理内で特定条件では処理しないようにすることが可能か検討されては?
erua

2020/01/07 06:48

解答ありがとうございます。 if文の中にif文を入れて条件で分岐させるという感じでしょうか。 知識不足で申し訳ないです。
oikashinoa

2020/01/07 14:25 編集

あらためてソース見ました。移動方向判定方法を変えたほうがいいです。 1.右、左とか個別にフラグを持ったとき、同時にtrueまたはfalseになった時どのようにするか考えてますか?個別に管理するより、方向(direction)として一つの変数で方向管理した方が楽だと思います。 2.ニュートラル状態も管理出来るようにしてください。(=カーソル停止状態。質問者がしたかったキャンセル状態がこれだと思ってます。) 3.SDK見たんですが…視線が上下左右に動いた としか検知できないんですかね。移動量すら分からないようだし、8方向しか分からない? 実機持ってないんでこれぐらいしか返答できないです。後は試行錯誤して頑張って下さい
oikashinoa

2020/01/08 00:16

今のソースを活かすならは… right=trueのときに視線が左になったらright,leftともにfalseにする とかニュートラル状態を作りましょう。いきなりソースにせず、紙にでも書いて考えてみて下さい。
erua

2020/01/08 06:20

ありがとうございます。 アドバイスいただいたことを参考に頑張ってみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問