p5.js 中的矩形对象网格

Grid of rectangle objects in p5.js

我正在尝试创建一个寻路迷宫,我们可以在其中添加源、目的地和矩形网格上的墙壁 objects.The 我们可以通过单击矩形 [=] 添加源、目的地和墙壁22=]在p5.js.

写了下面的代码
    var rows = 20;
    var cols = 20;
    var source =0;
    var destination =0;
    var grid = new Array(cols);

    function setup() {
         createCanvas(400, 400);
         for(var i=0;i<cols ; i++)
         {
          grid[i] = new Array(rows);
         }
         for(var j=0;j<cols;j++)
          {
         for(var k=0;k<rows;k++)
            {
         grid[j][k] = new node();

            }
         }

         }
       function draw()
       {
        for(var j=0;j<cols;j++)
         {
           for(var k=0;k<rows;k++)
           {
          grid[j][k].display(j*20,k*20);

            }
          }
       }
     function mouseClicked()
     {
       for(var j=0;j<cols;j++)
       {
          for(var k=0;k<rows;k++)
          {

         if((mouseX > (j)*20 && mouseX< (j+1) *20 )&& (mouseY > (k)*20 && mouseY< (k+1) *20 ))
           {
          grid[j][k].clicked();
           }

           }
         }
         }
     class node
          {constructor()
              {this.value =255 ;}

          display(x,y){
            rect(x,y,20,20);
            fill(this.value);
                       }
      clicked() {
          if(source == 1 ){
          this.value = color(242, 39, 39);
           source = 0;
          }
          else if(destination ==1){
          this.value =color(254,200 ,150);
          destination = 0;
           }
         else{if (this.value === 0) {
         this.value = 255;
          } else {
          this.value = 0;
          }  }}}
          function sourceee(){
                if (source=== 0) {
                           source = 1;
                         } else {
                            source = 0;
                                }
                              }
                 function destinations(){
                           if (destination=== 0) {
                                       destination = 1;
                                              } else {
                                        destination = 0;
                                        }
                                        }

此代码首先创建一个一维数组,我将其命名为 cols。 然后我使用循环将数组作为行添加到数组中。 所以每个列都有行数。现在每个数组都分配了一个 class 节点的对象。 所以 i,j 组合唯一标识 draw() 中的特定 object.Next 我通过使用 loops.The 显示函数获取 x,y 提供 j,k 值来调用网格中每个对象的显示函数position 作为参数并使用 rect() 函数给我一个正方形。我提供的参数乘以标识我的对象的唯一行和列的 20。高度和宽度均为 20,20,因此它创建了一个大小为 20*20.The 的正方形 mouseclicked() 函数应该为我单击的对象着色 upon.Now 这里的错误为它下面的对象着色 instead.I 不能使用对我的 k 值执行 -1 的 hack,因为那样它永远不会在我的网格的第一行工作。

根据我的理解,我尝试了所有不同的方法问题与对象在网格中的排列有关对象 [1][0] 似乎排列在 [0][0] 之前,但我不知道不知道具体是什么代码错误

支持HTML代码:

    <!DOCTYPE html>
      <html lang="">

      <head>
         <meta charset="utf-8">
          <meta name="viewport" content="width=device-width, initial-scale=1.0">
               <title>p5.js example</title>
     <style>
            body {
            padding: 0;
           margin: 0;
               }
           #src{
               top:500px;
               left:10px;
               position:absolute;
               }
        #des{
             top:500px;
             left:100px;
              position: absolute;
               }
            #gri{
               top:500px;
               left:200px;
                position: absolute;
              }

             </style>
              <script src="../p5.js"></script>
                <script src="../addons/p5.sound.min.js"></script>
               <script src="sketch.js"></script>
           </head>

               <body>
              <main>
              </main>
                <button type="button" id= "src" onclick="sourceee()">Source</button>
                <button type="button" id= "des" onclick="destinations()">Destination</button>
           </body>
           <script>

           </script>
            </html>

导致点击的网格不着色的问题在显示函数中

         display(x,y){
           rect(x,y,20,20);
           fill(this.value);
         }

注意 fillrect 之后被调用,这会导致根据前一个节点填充网格矩形。

要让单击的网格矩形被填充,请像这样切换调用顺序:

         display(x,y){
           fill(this.value);
           rect(x,y,20,20);
         }

可以重写代码,使节点对象包含自己的填充值和坐标。这样可以使网格节点的颜色和位置之间的联系更加明显。