2015-05-21 4 views
2

Я пытаюсь создать книжную полку из массива книг, которые я создал, и нанести по диагонали книгу, если «рекомендуемое» свойство для книги «ложно». Вы можете увидеть в моем for цикле, что я пытаюсь сделать это с помощью следующих если заявление:Ввод строки на передний план внутри цикла for

if(books[i].recommended === false) 
{ 
    fill(0, 0, 0); 
    line(bookX,bookY,bookX+90,bookY+100); 
} 

Однако моя проблема заключается в том, что линия создать в цикле for идет в фоновом режиме, за мои книги, и таким образом, невидимым. Как я могу заставить его выйти на передний план?

Полный код ниже:

//I create my array with my books 
var books = []; 

for(var y = 1;y<=20;y++) 
{ 
    books.push(
     { 
      title: "Book "+y, 
      stars: random(4), 
      author: "Author "+y, 
      color: color(random(255), random(255), random(255)), 
      recommended: !!Math.floor(Math.random() * 2) 
     } 
     ); 
} 

// Loop to draw 3 shelves 
var shelfY = 105; 
while (shelfY<=360) 
{ 
    fill(173, 117, 33); 
    rect(0, shelfY, width, 10); 
    shelfY +=120; 
} 

// Loop to draw all my books 
var bookX = 5; 
var bookY = 5; 
for (var i = 0; i<books.length; i++) 
{ 
    fill(books[i].color); 
    rect(bookX, bookY, 90, 100); 
    fill(0, 0, 0); 
    text(books[i].title, bookX+5, bookY+9, 70, 100); 
    text(books[i].author, bookX+5, bookY+24, 70, 100); 

    for (var j = 0; j < books[i].stars; j++) 
    { 
     image(getImage("cute/Star"), bookX+3 + j * 20, bookY+70,20, 30); 
    } 

    bookX += 100; 

    if(bookX>400) 
    { 
     bookX = 5; 
     bookY += 120; 
    } 

    if(books[i].recommended === false) 
    { 
     fill(0, 0, 0); 
     line(bookX,bookY,bookX+90,bookY+100); 
    } 
} 
+1

Откуда берутся функции 'fill' и' line'? – skolsuper

+0

Любая функция, вызываемая с помощью 'line', может потребоваться изменить, чтобы принять аргумент z-index, который позволит вам упорядочить стек элементов. – kaz

+0

@skols uper & @kaz это [проблема, которую я пытаюсь решить в Академии Хана] (https://www.khanacademy.org/computing/computer-programming/programming/objects/p/project-bookshelf) и 'fill' и 'line' являются по умолчанию частью их среды, поэтому я не могу самостоятельно их модифицировать. Любой другой способ решить мою проблему (т. Е. Показывать мои строки зачеркивания поверх моих книг) без необходимости изменять функцию 'line'? – aBertrand

ответ

1

вы рисуете линию после увеличения bookX и Буки, так что это не будет обращено в нужном месте.

Попробуйте положить ваши если (книги [я] .recommended и т.д ... перед тем bookX + = 100, и он будет работать

Вот окончательный код:

//I create my array with my books 
 
var books = []; 
 

 
for(var y = 1;y<=20;y++) 
 
{ 
 
    books.push(
 
     { 
 
      title: "Book "+y, 
 
      stars: random(4), 
 
      author: "Author "+y, 
 
      color: color(random(255), random(255), random(255)), 
 
      recommended: !!Math.floor(Math.random() * 2) 
 
     } 
 
     ); 
 
} 
 

 
// Loop to draw 3 shelves 
 
var shelfY = 105; 
 
while (shelfY<=360) 
 
{ 
 
    fill(173, 117, 33); 
 
    rect(0, shelfY, width, 10); 
 
    shelfY +=120; 
 
} 
 

 
// Loop to draw all my books 
 
var bookX = 5; 
 
var bookY = 5; 
 
for (var i = 0; i<books.length; i++) 
 
{ 
 
    fill(books[i].color); 
 
    rect(bookX, bookY, 90, 100); 
 
    fill(0, 0, 0); 
 
    text(books[i].title, bookX+5, bookY+9, 70, 100); 
 
    text(books[i].author, bookX+5, bookY+24, 70, 100); 
 

 
    for (var j = 0; j < books[i].stars; j++) 
 
    { 
 
     image(getImage("cute/Star"), bookX+3 + j * 20, bookY+70,20, 30); 
 
    } 
 

 
    if(books[i].recommended === false) 
 
    { 
 
     fill(0, 0, 0); 
 
     line(bookX,bookY,bookX+90,bookY+100); 
 
    } 
 

 
    bookX += 100; 
 

 
    if(bookX>400) 
 
    { 
 
     bookX = 5; 
 
     bookY += 120; 
 
    } 
 

 
}

.
+0

добро пожаловать! Вы можете отметить этот ответ, как принято в этом случае. –

+0

Так жаль за задержку. Я только что принял ответ! Еще раз спасибо! – aBertrand