2017-04-07 2 views
0

Ich habe kürzlich versucht, in p5.js zu bekommen und auf dem ersten Projekt, das ich arbeite, erlebe ich ein völlig perverses Problem, das aus irgendeinem Grund nirgendwo sonst online erwähnt wird von dem, was ich finden kann.Ich kann nicht auf Variablen verweisen, die in setup()

Jede Variable, die ich außerhalb von Setup() definiere, ist undefiniert, aber das ist eine bekannte Tatsache. Das Problem ist, dass jede Variable, die ich innerhalb von setup() definiere, ebenfalls undefiniert ist, das bedeutet, dass ich überhaupt keine Variablen verwenden kann. Hier

ist der Code:

function setup() { 
    const canvasRatio = 0.975; 
    createCanvas(int(windowWidth*canvasRatio), int(windowHeight*canvasRatio)); 
    fill(0); 
    strokeWeight(2); 
    var plyMov = createVector(0,0,0); 
    var plyPos = createVector(0,0,0); 
    const plySpd = 1; 
    const plyEnable = 0; 
} 

function draw() { 
    background(0); 
    drawPly(); 
} 

function drawPly(){ 
    plyPos=createVector(plyPos.x+plyMov.x,plyPos.y+plyMov.y,0) 
    plyMov=createVector(0,0,0); 
    stroke(255,0,0); 
    ellipse(int(width/2),int(height/2),80, 80); 
} 

Hier ist die Rückverfolgung von Chrom in vscode:

ReferenceError: plyPos is not defined 
    at drawPly (https://magicgonads.github.io/p5test/sketch.js:18:23) 
    at draw (https://magicgonads.github.io/p5test/sketch.js:14:3) 
    at p5.redraw (https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.5.8/p5.js:16560:7) 
    at p5.<anonymous> (https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.5.8/p5.js:11593:12) 
    at p5.<anonymous> (https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.5.8/p5.js:11489:12) 
    at new p5 (https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.5.8/p5.js:11769:12) 
    at _globalInit (https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.5.8/p5.js:8048:7) 
+0

Dies ist die grundlegende Art und Weise Variablen scoped sind in fast alle Sprachen programmation –

Antwort

1

Jede Variable I außerhalb der Einrichtung zu definieren() undefiniert, aber das ist ein bekannte Tatsache.

Umm, was? Das ist keine bekannte Tatsache. Sie könnten meinen, dass Sie die Funktionen von Processing nicht vor dem Setup verwenden können, aber das hindert Sie nicht daran, eine Variable am Anfang der Skizze zu definieren.

Wenn Sie eine Variable in setup() definieren, ist sie nur in setup() verfügbar. Das gilt für jede Variable, die in einer Funktion definiert ist.

Wenn Sie eine Variable in mehreren Funktionen verwenden möchten, sollten Sie sie auf der Skizzierebene definieren. Sie können immer noch initialisieren es (geben Sie ihm den Wert) in der setup() Funktion:

var plyPos; 
var plyMov; 

function setup() { 
    const canvasRatio = 0.975; 
    createCanvas(int(windowWidth*canvasRatio), int(windowHeight*canvasRatio)); 
    fill(0); 
    strokeWeight(2); 
    plyMov = createVector(0,0,0); 
    plyPos = createVector(0,0,0); 
} 

function draw() { 
    background(0); 
    drawPly(); 
} 

function drawPly(){ 
    plyPos=createVector(plyPos.x+plyMov.x,plyPos.y+plyMov.y,0) 
    plyMov=createVector(0,0,0); 
    stroke(255,0,0); 
    ellipse(int(width/2),int(height/2),80, 80); 
} 
+0

Ok danke. Ich musste die Funktionen der Verarbeitung verwenden, um die Variablen zu definieren, so dass erklärt wird, warum ich sie nicht vor der Einrichtung verwenden kann. Allerdings erinnere ich mich daran, eine andere Antwort gelesen zu haben, die besagt, dass setup() alle Variablen und ein Tutorial online macht, das besagt, dass wenn eine Variable, die noch nirgendwo existiert, in einer Funktion definiert ist, global wird. –

+0

Es scheint irgendwie immer noch undefiniert zu sein. –

+0

@MagicGonads Es ist schwer, Ihnen beim Debuggen zu helfen, ohne Ihren Code zu sehen. Sie könnten ein aktuelles [mcve] in einer neuen Frage veröffentlichen. –

Verwandte Themen