2017-01-15 3 views
1

То, что я пытаюсь сделать2D сетки объектов в p5.js

Я пытаюсь создать игру линкоров и на данный момент я работаю над рисованием доски таким образом, чтобы каждое пятно является объектом. Таким образом, когда пользователь нажимает на них, они могут выбрать, где разместить свои линкоры. Я пытаюсь сделать это, сохраняя каждое пятно как объект в массиве, называемом кругами.

Grid

Проблема

Моя проблема заключается в том, что при попытке создать объекты, я могу только показаться, чтобы сделать всю сетку в качестве одного объекта. Вот код, который я до сих пор (извините за качество, я нуб!):

var circles = []; 
var x = 100; 
var y = 100; 
for(i = 0; i < 2; i++) { 
    circles[i] = { 
     drawGrid: function() { 
      for (var x = 100; x <= 1000; x += 100) { 
       for (var y = 100; y <=1000; y += 100) { 
        fill(0); 
        ellipse(x,y,20,20); 
       } 
      } 
     } 
    } 
} 

function setup() { 
    createCanvas(1100,1100); 
} 

function draw() { 
    for(i = 0; i < 2; i++) { 
     circles[i].drawGrid(); 
    } 
} 

Я подделаны расположение для петель (х, у и я), но ничего не похоже на работу и если я попробую что-нибудь еще, вместо того, чтобы получить сетку, как показано ниже - с каждым O быть объектом:

O O O O 
O O O O 
O O O O 
O O O O 

я получить что-то вроде одного из них:

1) O O O O | 2) O 
    O   |  O 
    O   |  O 
    O   |   O 

Любая помощь высоко оценил, спасибо!

ответ

0

я бы функцию конструктора для круга, как это:

var circles = []; 

function setup() { 
    createCanvas(500, 500); 
    //there's a "b" for every "a" 
    for (var a = 10; a < width; a += 30) { 
    for (var b = 10; b < height; b += 30) { 
     //add the circles to the array at x = a and y = b 
     circles.push(new Circle(a, b)); 
    } 
    } 
    console.log(circles.length); 

} 

function draw() { 
    background(50); 
    for (var b = 0; b < circles.length; b++) { 
    circles[b].show(); 
    //console.log("shown"); 
    } 
} 

function Circle(x, y) { 
    this.x = x; 
    this.y = y; 

    this.show = function() { 
    fill(255); 
    noStroke(); 
    ellipse(this.x, this.y, 10, 10); 
    //console.log("showing"); 
    } 
} 

, конечно, вы будете играть со значениями немного, но это основная идея

+0

Спасибо за ответ! У меня есть один вопрос, хотя он создает массив из 100 кругов, а a и b создают правильные координаты, он не присваивает a и b как x и y для круга при рисовании. – Stan

+0

почему вы так говорите? – Pepe

+0

он принимает a и b как аргументы 'круги.push (новый круг (a, b));', он сохраняет эти значения в this.x и this.y 'function Circle (x, y) {this.x = x ; this.y = y; ', а затем использует this.x и this.y для рисования круга' эллипс (this.x, this.y, 10, 10); ' – Pepe

Смежные вопросы