Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Why does it keep throwing a reading undefined variable error when they ARE defined?

So….. I get an error:

"<a class='gotoLine' href='#101:18'>101:18</a> Uncaught TypeError: Cannot read properties of undefined (reading 'x')"

When I run this:

var Canvas = document.getElementById('ViewPort');
var Context = Canvas.getContext("2d");

Canvas.width = 250;
Canvas.height = 250;
Canvas.style.border = "1px solid black";

var Objects = [];

//Testing

Objects.push({

  x: 50,
  y: 50,
  width: 50,
  height: 50,
  style: "black",

})

Objects.push({

  x: 55,
  y: 55,
  width: 50,
  height: 50,
  style: "blue",

})

//End Testing

function RenderObjects() {

  for (var i = 0; i < Objects.length; i++) {

    for (var j = 0; j < Objects.length; j++) {

      if (Hitting(Object[i], Object[j])) {

        console.log("Hitting object " + j);
        console.log(Object[j])

      } else {

        Context.fillStyle = Objects[i].fillstyle;
        Context.fillRect(Objects[i].x, Objects[i].y, Objects[i].width, Objects[i].height);

      }

    }


  }

}

function Hitting(rectA, rectB) {

  return !(rectA.x + rectA.width < rectB.x ||
    rectB.x + rectB.width < rectA.x ||
    rectA.y + rectA.height < rectB.y ||
    rectB.y + rectB.height < rectA.y);

}

RenderObjects();
<canvas id = "ViewPort"></canvas>

What is the issue? I have read through my code and I can’t find any issue. It should render two objects on an HTML canvas; provided that they don’t collide.

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

>Solution :

You only should fix some typo.

var Canvas = document.getElementById('ViewPort');
var Context = Canvas.getContext("2d");

Canvas.width = 250;
Canvas.height = 250;
Canvas.style.border = "1px solid black";

var Objects = [];

//Testing

Objects.push({

  x: 50,
  y: 50,
  width: 50,
  height: 50,
  style: "black",

})

Objects.push({

  x: 55,
  y: 55,
  width: 50,
  height: 50,
  style: "blue",

})

//End Testing

function RenderObjects() {

  for (var i = 0; i < Objects.length; i++) {

    for (var j = 0; j < Objects.length; j++) {

      if (Hitting(Objects[i], Objects[j])) { //instead of Object[i], Object[j]

        console.log("Hitting object " + j);
        console.log(Objects[j]) //instead of Object[j]

      } else {

        Context.fillStyle = Objects[i].fillstyle;
        Context.fillRect(Objects[i].x, Objects[i].y, Objects[i].width, Objects[i].height);

      }

    }


  }

}

function Hitting(rectA, rectB) {

  return !(rectA.x + rectA.width < rectB.x ||
    rectB.x + rectB.width < rectA.x ||
    rectA.y + rectA.height < rectB.y ||
    rectB.y + rectB.height < rectA.y);

}

RenderObjects();
<canvas id = "ViewPort"></canvas>
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading