私は脳性麻痺の障害児と一緒に働いています。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);
}
前もって感謝します