/ / टक्कर का पता लगाने एल्गोरिथ्म मुद्दा - जावास्क्रिप्ट

टकराव का पता लगाने एल्गोरिदम मुद्दा - जावास्क्रिप्ट

यहाँ jsfiddle मैं अब तक काम कर रहा हूँ: http://jsfiddle.net/TLYZS/

यदि आप कोड को डिबग करते हैं और टकराव की जांच करते हैंफ़ंक्शन आप देख सकते हैं कि टक्कर ठीक काम कर रही है जब उपयोगकर्ता एक लड़ खेल में दूसरे चरित्र की इच्छा के साथ ओवरलैप करता है टक्कर इस तरह से काम नहीं करना चाहिए:

  1. आप देख सकते हैं कि जब मैं अक्षर को थोड़ी दूरी से टकराता हूं या टकराता हूं तो टकराव का पता लगाने वाला कार्य काम नहीं करता है, भले ही आप इसे स्क्रीन पर देख सकें कि उपयोगकर्ता चरित्र को सजा रहा है
  2. मैं इसे ठीक काम करने के लिए इस टकराव का पता लगाने के कार्य को कैसे ठीक कर सकता हूं?

    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