2010-06-30 18 views
6

मेरे पास HTML5 कैनवास पर खींची गई कुछ छवियां हैं और मैं यह देखना चाहता हूं कि वे माउस क्लिक पर हिट हैं या नहीं। आसान लगता है, मेरे पास छवियों की सीमाएं हैं, हालांकि छवियों को बदल दिया गया है (अनुवादित और स्केल किया गया)। दुर्भाग्यवश, संदर्भ में वर्तमान ट्रांसफॉर्म मैट्रिक्स प्राप्त करने का कोई तरीका नहीं है, और साथ ही, मैट्रिक्स गुणा के लिए कोई एपीआई नहीं है। लगता है कि एकमात्र समाधान स्वयं को ट्रांसफॉर्म का ट्रैक रखना और मैट्रिक्स गुणा को लागू करना है। सुझावों का स्वागत है।एचटीएमएल 5 कैनवास हिटस्टिंग

+0

अधिक सोचने के बाद, मुझे एहसास हुआ है कि अगर संदर्भ में वर्तमान परिवर्तन मैट्रिक्स प्राप्त करने का कोई तरीका था, तो यह उपयोगी नहीं होगा, क्योंकि मुझे माउस क्लिकिंग पर छवि परिवर्तन मैट्रिक्स की आवश्यकता है और उस समय संदर्भ में एक अलग है बदलना। मुझे शायद एक दृश्य ग्राफ की आवश्यकता है, या तो एक साधारण को लागू करें या केक जेएस जैसे पुस्तकालय का उपयोग करें। –

+0

आपको अनुवाद और स्केल करने के लिए मैट्रिस की आवश्यकता नहीं है। उदाहरण के लिए, माउस एक्स समन्वय का अनुवाद और स्केल करने के लिए, newPointX = event.x * scaleX + translateX –

+0

का उपयोग करें धन्यवाद, आप सही हैं, इस मामले में मुझे मैट्रिक्स गुणा को लागू करने की आवश्यकता नहीं है। –

उत्तर

17

यह 3 डी (ओपनजीएल) ग्राफिक्स दुनिया में भी एक आम समस्या है।

समाधान एक सहायक कैनवास ऑब्जेक्ट (जो प्रदर्शित नहीं होता है) बनाने के लिए है, और इसमें अपनी छवि को फिर से निकालना है। ड्रॉ बिल्कुल आपके मुख्य कैनवास ड्रा के समान ही है, सिवाय इसके कि प्रत्येक तत्व एक अद्वितीय रंग के साथ खींचा जाता है। फिर आप अपने माउस पिक से संबंधित पिक्सेल को देखते हैं, और इसके रंग को पढ़ते हैं, जो आपको संबंधित तत्व (यदि कोई हो) देगा।

ओपनजीएल दुनिया में यह आमतौर पर उपयोग की जाने वाली विधि है। आप "opengl object picking" जैसे गुगलिंग शब्दों द्वारा इसका विवरण पा सकते हैं। यहां one of the many search results है।

अद्यतन: एचटीएमएल 5 कैनवास स्पेक में अब hit regions शामिल है। मुझे यकीन नहीं है कि ब्राउज़र में अभी तक कौन सी डिग्री समर्थित हैं।

+0

कूल विचार! अच्छी तरह से कहा –

+0

प्रतिभा। अगर मैं कर सकता तो मैं 10x ऊपर उठाना चाहता था! –

+1

यहां मुद्दा यह है कि कैनवस सभी गैर वैकल्पिक रंग मिश्रण और एंटी एलियासिंग करते हैं। वस्तुओं के बीच में परिणाम जब वस्तुओं एक दूसरे के पीछे आते हैं। ये रंगों के बीच में आपके द्वारा संग्रहीत अन्य रंग आईडी के लिए काफी करीब आ सकते हैं कि एक सीमा क्षेत्र को किसी भिन्न वस्तु के लिए हिट के रूप में गलत तरीके से प्रस्तुत किया जा सकता है। मैं इस बारे में जानने का सबसे अच्छा तरीका अनिश्चित हूं। एक अलग कैनवास प्रति डिटेक्टेबल ऑब्जेक्ट का उपयोग बहुत अधिक स्मृति को बर्बाद कर देता है, और प्रत्येक ऑब्जेक्ट को अलग-अलग प्रस्तुत करता है जबकि माउस चल रहा है और चेकिंग ऐसा लगता है जैसे यह बहुत अधिक प्रदर्शन बर्बाद कर देगा। –

संबंधित मुद्दे