5

私は脳性麻痺の障害児と一緒に働いています。1人の子供は細かい運動制御が制限されているため、現在、ジョイスティックを使用してマウスを制御しており、移動速度は非常に低く設定されています。彼女は画面上のすべてのボタンをクリックできるので、これは彼女にとってはうまくいきますが、私たちはもっとうまくいくと思います-彼女が画面全体をトラバースしたいときは、そうするのに1年かかります(約10秒)。

私の仮説は、彼女の脳は元気で、運動制御だけが悪いというものです。それが本当なら、低速で起動したが一定の加速を経験したマウスは、画面全体を移動するときに速度を上げて速くなるので、彼女にとってより良いと思います。これが機能する場合は、PID制御と、多数の障害者の速度/加速設定を調整して、アクセスを高速化し、学習と能力開発を高速化することができます。

しかし、これを構築するための最良の方法はわかりません。すべての提案、考え、リンク、ヒントを歓迎します。

まず、ProcessingとJavaを使用し、mouseListenerとRobotを使用してカーソルを制御してみました。ただし、カーソル位置を読み取ってから書き込むため、これが最善の方法であるとは確信していません。そのため、最善の試みでもカーソルがジャンプし、スムーズな動きがありません。Javaで実現可能ですか?ある種のドライバーを使用してUSBからマウス入力を読み取り、画面上のカーソルのプロットを自分のものに置き換える必要がありますか?

私がもたらそうとしている効果を説明するために、いくつかのビデオを作成しました。

現状(私のイラストはカーソルを矢印キーから離している) http://www.youtube.com/watch?v=3ZhQCg5DJt8

私が望む新しい動作(マウスが加速する) http://www.youtube.com/watch?v=JcBK_ZCFGPs

使用する場合は、これらのデモを作成するために使用した処理コードを以下にコピーします。

現状のデモ:

import java.awt.AWTException;
import jav
a.awt.Robot;

Robot robot;
int i = 0;
int j = 0;

void setup() {
  setupDotgame();
  try { 
    robot = new Robot();
  } 
  catch (AWTException e) {
    e.printStackTrace();
  }
  robot.mouseMove(screenWidth/2, screenHeight/2);
}

void draw() {
  //println(frameCount);
  robot.mouseMove(screenWidth/2+8*i, screenHeight/2+8*j);
  drawDotgame();
}

void keyPressed() {
  if (keyCode == UP) {
    j--;
  } 
  else if (keyCode == DOWN) {
    j++;
  }
  else if (keyCode == RIGHT) {
    i++;
  }
  else if (keyCode == LEFT) {
    i--;
  }
}

望ましい行動:

import java.awt.AWTException;
import java.awt.Robot;

Robot robot;
int i = 0;
int j = 0;
int delta = 8;
int time = 0;

void setup() {
  setupDotgame();
  try { 
    robot = new Robot();
  } 
  catch (AWTException e) {
    e.printStackTrace();
  }
  robot.mouseMove(screenWidth/2, screenHeight/2);
}

void draw() {



  //println(frameCount);
  robot.mouseMove(screenWidth/2+i, screenHeight/2+j);
  drawDotgame();

}

void keyPressed() {
  if (millis() - time < 90) {
    delta += 8;
  }
  else { delta = 8; }
  time = millis();


  if (keyCode == UP) {
    j-=delta;
  } 
  else if (keyCode == DOWN) {
    j+=delta;
  }
  else if (keyCode == RIGHT) {
    i+=delta;
  }
  else if (keyCode == LEFT) {
    i-=delta;
  }
}

そして、両方が参照するDotGameコード:

void setupDotgame() {
  size(1000, 600);
  background(255);
  fill(255, 0, 0);
  noStroke();
  smooth();
  drawCircle();
}

void drawDotgame() {
  if (get(mouseX, mouseY) != color(255)) {
    background(255);
    drawCircle();
  }
}

void drawCircle() {
  int x = round(random(50, width-50));
  int y = round(random(50, height-50));
  int rad = round(random(20, 80));
  ellipse(x, y, rad, rad);
}

前もって感謝します

4

1 に答える 1

0

カールが示唆したように、マウスに実際にこの動作を持たせる以外の最良の答えは、マウスを必要な場所にかなり近づけてそこからジョイスティックを使用するある種のジャンプ動作であると私は信じています。

AutoItv3 というプログラムがこの種のことを実行できることをたまたま知っています。特別なホットキーを認識するように設定し、そのホットキーでマウスを任意の領域に移動させることができます。

これに役立つコマンドは、HotKeySet、MouseMove、および Func/EndFunc です。

于 2013-10-03T17:45:42.160 に答える