Приготовление тетриса с p5.js

#p5.js

Вопрос:

У меня пока есть кое-какой код:

 function setup() {  createCanvas(500,550); } function draw() {  background(150);  o(); } function block(x,y) {  rectMode(CENTER)  rect(x,y, cols, rows, 2) } function o() {  fill(255, 255,0)  block(width/2, rows);  block(width/2, rows* 2);  block(width/2   cols, cols)  block(width/2   cols, cols * 2) }  

И мне интересно, что делать дальше. Я подумал о создании drop функции, и вот как это будет выглядеть:

 function drop() { rows  = rows; cols  = cols; }  

Затем добавьте это в setup функцию: frameRate(10); Так что он движется медленнее, но это не сработает. Я не знаю, как заставить блок опуститься, не изменив значения cols и rows . Мой вопрос в том, как я могу заставить блоки двигаться вниз в функции(например, вызываемой функции drop )?

ПРАВКА: Функция удаления не сработала бы, потому что она изменила бы размер, а не положение.

Ответ №1:

Чтобы блок двигался, он должен иметь x и y позицию.

В настоящее время вы просто жестко задали позицию.

 block(width/2, rows);  

Вместо этого вам следует сделать что-то вроде этого

 let x; let y = rows;  function setup() {  createCanvas(500, 500);  x = width / 2; //you could not set x before now, because the program didn't yet know what the width was  

Затем замените свою o() функцию на эту:

 function o() {  fill(255, 255,0)  block(x, y);  block(x, y   cols);  block(x   cols, y);  block(x   cols, y   cols); }  

Наконец, вы можете изменить положение x и y в своей drop() функции (не забудьте также вызвать ее).

 function drop() {  y  = 10; }  

Комментарии:

1. Это сработало. И я могу сделать это для всех фигур для тетриса, таких как L и T? А также должен ли я добавить y по кольцам: ? y = cols

2. По какой-то причине он не позволяет мне редактировать, так что вот ^^^ комментарий лучше: это сработало. И я могу сделать это для всех фигур для тетриса, таких как L и T? А также должен ли я добавить y по кольцам: ? y = cols Мне также нужно, чтобы блоки падали, как при щелчке, так что мне следует снизить частоту кадров?

3. Да, вы можете это сделать y = cols , и да, вы можете сделать это для всех блоков. Вы также можете изменять частоту кадров и количество падающих блоков в каждом кадре.

4. Это хорошая идея… Не могу поверить, что я об этом не подумал. Спасибо за вашу помощь!

5. Я хотел бы получить ваш пост, но у меня даже нет 15 представителей.