यहाँ jsfiddle मैं अब तक काम कर रहा हूँ: http://jsfiddle.net/TLYZS/
यदि आप कोड को डिबग करते हैं और टकराव की जांच करते हैंफ़ंक्शन आप देख सकते हैं कि टक्कर ठीक काम कर रही है जब उपयोगकर्ता एक लड़ खेल में दूसरे चरित्र की इच्छा के साथ ओवरलैप करता है टक्कर इस तरह से काम नहीं करना चाहिए:
- आप देख सकते हैं कि जब मैं अक्षर को थोड़ी दूरी से टकराता हूं या टकराता हूं तो टकराव का पता लगाने वाला कार्य काम नहीं करता है, भले ही आप इसे स्क्रीन पर देख सकें कि उपयोगकर्ता चरित्र को सजा रहा है
मैं इसे ठीक काम करने के लिए इस टकराव का पता लगाने के कार्य को कैसे ठीक कर सकता हूं?
function Collision(r1, r2) { return !(r1.x > r2.x + r2.w || r1.x + r1.w < r2.x || r1.y > r2.y + r2.h || r1.y + r1.h < r2.y); }
उत्तर:
जवाब के लिए 0 № 1यहाँ मेरा पुराना जेएस कार्यान्वयन है। इसे अपने प्रोजेक्ट में उपयोग करने का प्रयास करें:
function Rectangle(x, y, w, h)
{
if(!x) x = 0; if(!y) y = 0; if(!w) w = 0; if(!h) h = 0;
this.x = x; this.y = y;
this.width = w; this.height = h;
}
Rectangle.prototype.isEmpty = function() // : Boolean
{
return (this.width<=0 || this.height <= 0);
}
Rectangle.prototype.intersection = function(rec)
{
var l = Math.max(this.x, rec.x);
var u = Math.max(this.y, rec.y);
var r = Math.min(this.x+this.width , rec.x+rec.width );
var d = Math.min(this.y+this.height, rec.y+rec.height);
if(r<l || d<u) return new Rectangle();
else return new Rectangle(l, u, r-l, d-u);
}
तब तुम बस बुलाओ
if( !r1.intersection(r2).isEmpty() ) ... // there is a collision