Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

オブジェクトのタッチ誤判定 #311

Open
ikedanaruki opened this issue Apr 21, 2015 · 4 comments
Open

オブジェクトのタッチ誤判定 #311

ikedanaruki opened this issue Apr 21, 2015 · 4 comments

Comments

@ikedanaruki
Copy link

Scaleを細かくいじって配置するオブジェクトの座標に小数点が入るのがまず原因だと思うのですが、オブジェクトのちょうど端の部分をタッチさせると別のオブジェクトをタッチしたと誤判定されるケースが出てきております。

内部のソースを追ったところ、オブジェクトのタッチ判定のために中でオブジェクト毎に特定の色を定めてそのオブジェクトの位置と大きさに即した矩形を描画して重ねていったビットマップを保持し、タッチした場合はそのビットマップ上の色をタッチした座標から取得し、それによってタッチしたオブジェクトを特定しているという流れであることは把握しました。

内部で持っている画像をtoDataURLメソッドで見るようにしたところ、問題が発生するケースでは描画しているビットマップにアンチエイリアスがかかり、端の部分だけ色が違っていることがわかりました。

こういった事象をご存じでしょうか。そして回避する方法についても検討したく思っております。

@ikedanaruki
Copy link
Author

内部で持っているビットマップを取得したのを添付します

https://twitter.com/ikedanaruki/status/590494364872278016

黄色っぽくて縦に長いので、境界が青くなっているのがあると思います

@rtsan
Copy link
Collaborator

rtsan commented Dec 9, 2015

タッチ判定を行っているCanvasのコンテキストについて、 CanvasRenderingContext2D#imageSmoothingEnabled を設定することで、境界に生じる誤差を軽減できる可能性があります。

@rtsan
Copy link
Collaborator

rtsan commented Dec 28, 2015

imageSmoothingEnabledで十分な効果を得られなかったため、周辺のピクセルからもサンプリングを行うように変更しました。
この範囲は新たに追加したenchant.ENV.COLOR_DETECTION_LEVELから変更することができます。

@ikedanaruki
Copy link
Author

ありがとうございます。開発しているアプリで試したいと思います!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants