2013-02-02 27 views
5

Tôi đang làm việc với những đứa trẻ khuyết tật, bị bại não. Một đứa trẻ có giới hạn kiểm soát động cơ tốt, do đó, cô hiện đang sử dụng cần điều khiển để điều khiển chuột và tốc độ di chuyển của nó được đặt rất thấp. Điều này phù hợp với cô ấy, vì cô ấy có thể nhấp vào tất cả các nút trên màn hình, nhưng tôi nghĩ chúng tôi có thể làm tốt hơn - khi cô ấy muốn đi qua toàn bộ màn hình, phải mất một độ tuổi để thực hiện điều đó (khoảng 10 giây).ghi đè cài đặt tốc độ của chuột. Tạo thuật toán tỷ lệ chuột của riêng tôi

Giả thuyết của tôi là bộ não của cô ấy ổn, và chỉ kiểm soát động cơ của cô ấy là kém. Nếu đó là sự thật, tôi tin rằng một con chuột bắt đầu ở tốc độ thấp, nhưng trải qua một sự tăng tốc liên tục, sẽ tốt hơn cho cô ấy, vì nó sẽ tăng tốc và trở nên nhanh chóng khi lướt qua toàn bộ màn hình. Nếu điều này hoạt động, thì chúng ta có thể điều chỉnh điều khiển PID, và tốc độ/tốc độ cài đặt cho một số lượng lớn người khuyết tật, tăng tốc truy cập của họ và do đó học tập và phát triển của họ.

Nhưng tôi không biết cách tốt nhất để xây dựng điều này - tất cả đề xuất, suy nghĩ, liên kết và mẹo chào mừng.

Để bắt đầu, tôi đã thử sử dụng Xử lý và Java và sử dụng trình xử lý chuột và Robot để điều khiển con trỏ. Tôi không tin rằng đây là cách tốt nhất mặc dù, khi tôi đang đọc vị trí con trỏ và sau đó viết cho nó, vì vậy những nỗ lực tốt nhất của tôi vẫn làm cho con trỏ nhảy xung quanh, và không có chuyển động trơn tru. Liệu nó có thể đạt được trong Java? Tôi có cần phải đọc đầu vào chuột từ USB sử dụng một loại trình điều khiển nào đó, và sau đó thay thế âm mưu của con trỏ trên màn hình bằng của riêng tôi?

Tôi đã tạo một vài video để minh họa hiệu ứng tôi đang cố gắng mang lại.

hiện trạng (hình minh họa của tôi đang thúc đẩy con trỏ ra khỏi các phím mũi tên) http://www.youtube.com/watch?v=3ZhQCg5DJt8

Các hành vi mới, tôi muốn (chuột tăng tốc) http://www.youtube.com/watch?v=JcBK_ZCFGPs

nếu đó là bất kỳ sử dụng, mã Processing tôi đã sử dụng để làm cho những bản demo được sao chép ở dưới đây:

Status hiện bản demo:

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--; 
    } 
} 
hành vi

mong muốn:

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; 
    } 
} 

Và mã DotGame cả hai đều tham khảo:

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); 
} 

Cảm ơn trước

+0

Bạn đã cân nhắc sử dụng nút trên cần điều khiển để tăng tốc độ di chuyển. Ví dụ Ctrl + mũi tên làm cho con chuột di chuyển nhanh chóng khi sử dụng MouseKeys. Tương tự như một cái gì đó mà có thể làm cho nó nhảy nếu cần thiết nhưng vẫn có tốc độ thấp tinh chỉnh yêu cầu? – cjds

+0

Cảm ơn bạn đã đề xuất. Học sinh trong câu hỏi chỉ có thể làm một việc cùng một lúc bằng tay, nên tôi không lạc quan về việc cô ấy có thể làm hai việc cùng một lúc. Như tôi đã nói, tôi nghĩ rằng bộ não của cô ấy ổn, nhưng rất nhiều cơ bắp của nó làm cho mọi thứ trở nên khó khăn. – samjewell

+1

Tôi không muốn nghe có vẻ như giật, nhưng đây có phải là câu hỏi lập trình bạn muốn trả lời hay bạn đang cố gắng thảo luận về cách tốt nhất để làm điều này? Và sau đó trên một lưu ý xây dựng: không giải quyết điều này cho "chương trình của bạn", nhưng giải quyết nó cho các thiết bị đầu vào. Làm cho cần điều khiển cháy nhiều hơn một giây, dựa trên thời gian nó được tổ chức (tương đối đơn giản với một arduino, vv), và vấn đề "làm thế nào để làm điều này trong java" biến mất, bởi vì bây giờ bạn có một giải pháp chung cho tất cả các chương trình trên tất cả các hệ điều hành. –

Trả lời

0

như Carl đề nghị, tôi tin rằng câu trả lời ngắn nhất làm cho con chuột thực sự có hành vi này, là một số loại hành vi nhảy mà sẽ nhận được con chuột khá gần với nơi bạn cần phải đi, sau đó sử dụng phím điều khiển từ đó.

Tôi tình cờ biết rằng một chương trình có tên AutoItv3 có thể làm việc này. Bạn có thể thiết lập để nhận ra các phím nóng đặc biệt, sau đó có phím nóng đó di chuyển chuột đến bất kỳ vùng nào bạn muốn.

Lệnh hữu ích cho việc này là HotKeySet, MouseMove và Func/EndFunc.