users have to click certain points on a image
cho tôi biết rằng thay vì putting invisible/transparent buttons over the image, mỗi lần xử lý sự kiện của riêng nó, bạn đã chọn có bất kỳ nhấp chuột nào trên hình ảnh được gửi đến một địa điểm và sẽ quyết định nhấp chuột nào đi với mục tiêu nào.
(a) (b) (c)
Có nghĩa là nếu hình ảnh của bạn trông giống như (a) mà bạn muốn thiết lập chấm của bạn (địa điểm pixel) tương tự (b):
Điều này là dễ hiểu gây ra cho bạn vấn đề vì nó rất khó cho con người để đạt được những mục tiêu nhỏ.
Bạn đã quyết định cách khắc phục điều này là cung cấp cho các ngón tay con người béo phì và đang cố gắng hiệu chỉnh cách tạo ra chất béo. Cho phép thử một trường hợp sử dụng mà người dùng cố gắng quay số 1238. Trong (c) tôi tăng kích thước ngón tay của chúng khi chúng di chuyển. Kể từ khi báo chí trên 8 bao gồm các dấu chấm từ cả 8 và 0 tôi muốn nói rằng đó là quá lớn.
(d) (e) (f)
(d) cho thấy một kích thước hợp lý để hiệu chỉnh với cách tiếp cận này. Chú ý rằng 1 và 3 vẫn bỏ lỡ. 1 là một đơn giản vì các nút này không phải là hình vuông.Đó là một hạn chế của phương pháp tiếp cận ngón tay béo này. 3 là một lỡ bởi vì con người thực sự bị mất và nhấn giữa các nút. Nếu bạn nhấn mạnh rằng 3 nên đếm tôi không biết làm thế nào chúng tôi muốn làm điều đó mà không có 2, 5, & 6 đếm là tốt. Nếu đó là những gì bạn muốn, chúng tôi cần phát hiện va chạm hình chữ nhật. Thêm về điều đó sau.
Giả sử 3 nên được coi là bỏ lỡ Tôi muốn bạn xem xét rằng (d) là toán học giống hệt nhau (e). Nó có thể đạt được chỉ đơn giản bằng cách thêm sự khoan dung cho các điểm mục tiêu không phải là ngón tay người dùng. 1 và 3 vẫn còn nhớ nhưng bây giờ thay vì được quan tâm với hiệu chỉnh độ béo của một ngón tay người dùng, chúng tôi chỉ quan tâm chính mình với mục tiêu lớn như thế nào.
Đơn giản chỉ cần suy nghĩ theo cách này cho chúng ta thỏa thuận tự do với thực tế là mục tiêu của chúng tôi không vuông. Chúng là hình chữ nhật. Làm điều đó trong (f) sửa lỗi 1 bị bỏ qua. Nếu các mục tiêu của bạn là tất cả cùng kích thước và tỷ lệ bạn không cần phải đối phó với việc sử dụng các dung sai x và y khác nhau. Nếu bạn muốn có sự linh hoạt để thay đổi kích cỡ, do đó bạn có thể xử lý nút màu xanh lá cây đó đúng cách, sau đó dừng lập mô hình các mục tiêu như một điểm duy nhất. Lập mô hình chúng với android.graphics.Rect
. Thực ra tôi thích bạn mô hình hóa chúng với lớp riêng của chúng có chứa android.graphics.Rect
nhưng đó là hộp xà phòng OOP tôi sẽ trèo lên một số thời điểm khác.
Giả sử bạn đã xác định mục tiêu với một new Rect(left, top, right, bottom)
] ở đâu đó và giao nó cho Rect r;
bây giờ bạn có thể phát hiện một hit với r.contains((int) event.getX(), (int) event.getY());
Kể từ khi chúng tôi đã thumbed mũi của chúng tôi tại các vị thần OOP và bác bỏ ý tưởng nút Tôi muốn nói cho mỗi nhấp chuột bạn lặp qua tất cả các mục tiêu thử nghiệm chứa().
(g)
Bây giờ, nếu bạn thực sự khẳng định rằng 2, 3, 5, và 6 nên tất cả các kích hoạt khi bỏ lỡ dùng đánh 3 sau đó nhìn vào motionEvent.getSize()
. Điều đó sẽ đo lường các "fatness" của các liên lạc từ 0 đến 1. Nếu getToolMajor()
hoặc getTouchMajor()
có sẵn chúng có thể giúp bạn ước tính các điểm ảnh thực tế chạm vào. Nó có thể giúp để biết các screen size nhưng theo như tôi có thể nói từ các tài liệu bất kỳ kích thước pixel được sản xuất bằng cách sử dụng bất kỳ điều này sẽ được gần đúng. Một số thử nghiệm sẽ giúp xác định xem điều này hoạt động như thế nào hoặc nếu bất kỳ hằng số mở rộng nào là cần thiết. Điều này có thể nhỏ hơn mà bạn mong đợi bởi vì chúng được thiết kế cho các chương trình sơn mang lại một cơn đột quỵ táo bạo với áp lực gia tăng, không phải để xem vết sưng ngón tay của bạn thành những thứ.
Sử dụng điều đó giống như khoan dung để xây dựng một Rect khác xung quanh nhấp chuột (cho phép gọi nó là fatFinger
). Kiểm tra r.intersects(fatFinger)
trong vòng lặp cung cấp cho bạn mọi r
trên hình ảnh của bạn. Mỗi lần bạn thấy một số khác là r
để giải quyết.
Điều đó sẽ cung cấp cho bạn một cái gì đó như (g). Bây giờ 3 báo chí là một 2, 3, 5, & 6 báo chí, 1 báo chí bây giờ là một 1 & 4 báo chí và 8 báo chí là một 8 & 0 báo chí.
Báo chí 2 là kỳ diệu vẫn chỉ là một 2 báo chí. Kéo nó ra là gần như khó như đánh dấu chấm với dấu chấm cảm ứng. Điều này có thể tốt cho trò chơi của bạn nhưng đừng làm điều đó với điện thoại của tôi. :)
Nếu bạn không muốn phát điên, hãy làm một chút OOP và tạo một lớp cho các mục tiêu của bạn có chứa một Rect và cung cấp phương pháp giao nhau của riêng bạn được hỗ trợ bởi Rect one. Bằng cách đó bạn có thể lặp họ, nhận được mỗi t
và khi t.intersects(fatFinger)
là đúng bạn có thể gọi riêng t.wasTouched();
Nói tóm lại bạn, vỗ béo các mục tiêu, không phải là ngón tay, trừ khi bạn muốn nó chạm vào mọi thứ nó đến gần. Nếu vậy, vỗ béo cả hai.
Bất kể bạn quyết định đi với (f) hoặc (g) tôi nghĩ bạn sẽ thấy ít cần thiết để người dùng định cấu hình kích thước ngón tay nếu bạn sử dụng phương pháp này. Chúc mừng mã hóa!
Nếu phương thức 'onTouchEvent' tùy chỉnh của bạn đang hoạt động, bạn có thể triển khai thực đơn cài đặt với thanh tìm kiếm và lưu trữ biến' tolerance' bằng [Preferences Preferences] [1]. [1]: http://developer.android.com/guide/topics/data/data-storage.html#pref – JohnDow
Tôi không thể biết câu hỏi này có phải là về vấn đề phát hiện va chạm hay không, nhận được cài đặt dung sai từ người dùng hoặc về cách tính dung sai theo phần trăm. Bạn có thực sự bị mắc kẹt trên cả ba? – CandiedOrange