edit: я думаю, что я исправил бит 2d-массива ... Я забыл скобки () edit number 2: if не работал, потому что я использовал настройку одинарного знака = j для 0 каждый l oop ( : использование == решило проблему. о, радость кодирования!
первый пост.
Я пытаюсь закодировать грифа, которую я буду модифицировать и добавлять со временем, но я возникли проблемы.
Я могу отрисовать лады, струны и круги хорошо, даже ноты на кругах, но получить базовую ноту для показа - боль.
Я прокомментировал проблему строк в нижней части кода. Функция if вызывает зависание p5. js, массив 2d, похоже, не определен, хотя я помещаю массив sh в пустой массив.
помощь?
let stringNumber = 6;
let fretNumber = 22;
let notes = ["a", "a#", "b", "c", "c#", "d", "d#", "e", "f", "f#", "g", "g#"]
let baseNotes = [7, 0, 5, 10, 2, 7];
let fretboardWidth = 0;
let fretboardHeight = 0;
function setup() {
createCanvas(600, 800);
}
function draw() {
background(0,100,100);
fretboardWidth = width - 100;
fretboardHeight = height -100
renderFrets();
renderStrings();
renderCircles();
createNotes();
}
function renderFrets() {
for(i=1; i <= fretNumber; i++){
line(0, fretboardHeight / (fretNumber + 1) * i, fretboardWidth, fretboardHeight / (fretNumber + 1) * i);
}
}
function renderStrings() {
for(i=1; i <= stringNumber; i++){
line(fretboardWidth / (stringNumber +1) * i, 0, fretboardWidth / (stringNumber +1) * i, fretboardHeight);
}
}
function renderCircles() {
for(i = 1; i <= stringNumber; i++){
for(j = 1; j <= fretNumber; j++){
circle(fretboardWidth / (stringNumber+1) * i, fretboardHeight / (fretNumber+1) * j, 20);
}
}
}
function createNotes() {
let strings = [];
let gstring = [];
for(i=0; i < stringNumber; i++){
for(j=0; j <= fretNumber; j++) {
gstring.push(notes[(baseNotes[i] + j) % 12]);
// if(j=0){
// text(gstring[j], fretboardWidth / 7 * (i+1) - 4, fretboardHeight / (fretNumber+1) * j + 3);
// }
// else{
text(gstring[j], fretboardWidth / 7 * (i+1) - 4, fretboardHeight / (fretNumber+1) * j + 3);
// }
}
strings.push[gstring];
gstring = [];
}
text(strings[0][0], fretboardWidth / 7 * (i+1) - 4, 10);
}