Was ist hier genau das Problem (Programmieren = p5.js)?
Ich habe ein Problem mit dem programmieren, da angeblich p5js sagt: There's an error due to \"keyIsDown\" not being defined in the current scope (on line 36 in jspg?
Ich habe mal meinen Code hineinkopiert und hoffe, dass jemand hier mir helfen kann. (Ist ein Projekt für die Schule).
Ich würde gerne das Programm, wie es hier steht, ohne Probleme es zum laufen zu bringen.
let v;
let b;
let n;
let m;
let vGeschwindigkeit;
let bGeschwindigkeit;
let nGeschwindigkeit;
let mGeschwindigkeit;
function setup() {
createCanvas(310, 400);
background('lightgray');
v = -200;
b = -200;
n = -200;
m = -200;
vGeschwindigkeit = random(6); // Eine Zufallszahl zuordnen
bGeschwindigkeit = random(6); // Eine Zufallszahl zuordnen
nGeschwindigkeit = random(6); // Eine Zufallszahl zuordnen
mGeschwindigkeit = random(6); // Eine Zufallszahl zuordnen
}
function draw() {
background(240); // Löscht Bild
rect(10, v, 65, 100);
fill('black');
rect(85, b, 65, 100);
fill('black');
rect(160, n, 65, 100);
fill('black');
rect(235, m, 65, 100);
fill('white');
circle(mouseX, mouseY, 10); // Mauszeigerkreis
fill('black');
}
if (keyIsDown(82)) { //taste r -> Spiel neu
setup();
}
if (mouseIsPressed) {
rgbFarbwerte = get(mouseX, mouseY);
if (rgbFarbwerte[0] > 0) {
v = -200;
b = -200;
n = -200;
m = -200; //Falls man den Hintergrund drückt, dann soll das Spiel nochmal von Anfang an wieder starten.
}
}
if (mouseIsPressed) {
if (10 < mouseX && mouseX < 75 &&
v < mouseY && mouseY < v + 100) {
v = -200; //Taste 1 geht in die Ausgangslage
vGeschwindigkeit = random(6); //ändert Geschwindigkeit nochmal
}
}
if (mouseIsPressed) {
if (85 < mouseX && mouseX < 150 &&
b < mouseY && mouseY < b + 100) {
b = -200; //Taste 2 geht in die Ausgangslage
bGeschwindigkeit = random(6); //ändert Geschwindigkeit nochmal
}
}
if (mouseIsPressed) {
if (160 < mouseX && mouseX < 225 &&
n < mouseY && mouseY < n + 100) {
n = -200; //Taste 1 geht in die Ausgangslage
nGeschwindigkeit = random(6); //ändert Geschwindigkeit nochmal
}
}
if (mouseIsPressed) {
if (235 < mouseX && mouseX < 310 &&
m < mouseY && mouseY < m + 100) {
m = -200; //Taste 1 geht in die Ausgangslage
nGeschwindigkeit = random(6); //ändert Geschwindigkeit nochmal
}
}
v = v + vGeschwindigkeit;
if (v > height) {
v = -100;
vGeschwindigkeit = random(6); // Eine Zufallszahl zuordnen für Taste 1
}
b = b + bGeschwindigkeit;
if (b > height) {
b = -100;
bGeschwindigkeit = random(6); // Eine Zufallszahl zuordnen für Taste 2
}
n = n + nGeschwindigkeit;
if (n > height) {
n = -100;
nGeschwindigkeit = random(6); // Eine Zufallszahl zuordnen für Taste 3
}
m = m + mGeschwindigkeit;
if (m > height) {
m = -100;
mGeschwindigkeit = random(6); // Eine Zufallszahl zuordnen für Taste 4
}
1 Antwort
Du schließt die draw-Funktion zu früh.
function draw() {
/* ... */
}
if (keyIsDown(82)) {
/* ... */
Außerhalb von setup und draw ist die Funktion keyIsDown nicht bekannt.
Verschiebe also die geschweifte Klammer vor dem if an das Ende deines Codes, damit alle Code-Zeilen (wie sicherlich beabsichtigt) im Körper von draw stehen.
Diesen Aufruf in deinem if:
if (keyIsDown(82)) {
setup();
}
finde ich übrigens unschön. Die setup-Funktion ist nicht für einen Reset gedacht, sondern als initialer Setup, bei dem auch das Canvas-Element kreiert wird, auf dem gezeichnet wird. Bei einem Reset ist es aber nicht notwendig, ein neues Canvas-Element anzulegen, das alte Element kann doch wiederverwendet werden.
Des Weiteren warnt die Dokumentation:
(...) This method should be called only once at the start of setup. Calling createCanvas more than once in a sketch will result in very unpredictable behavior. (...)
Besser wäre eine separate reset-Funktion, die nur das zurücksetzt, was tatsächlich zurückgesetzt werden muss.
function reset() {
/* set initial state ... */
}
function setup() {
createCanvas(310, 400);
reset();
}
function draw() {
/* ... */
if (keyIsDown(82)) {
reset();
}
}