2017-03-25 24 views
1

私はこのエラーメッセージ "TypeError:aは未定義です"としばらくの間、私は最終的に私のプロジェクトのコードのいくつかの行に絞り込んだ。変数私はコンソールに来ていませんでしたp5

new p5(); 
var particle = function(X, Y, C, Kind, Fun) { 
     this.pos = createVector(X, Y); 
     this.vel = createVector(0, 0); 
     this.accel = createVector(0, 0); 
     this.col = C; 
     this.isDead = false; 
     this.kind = Kind; 
     this.affect = Fun; 
}; 

function setup() { 
    createCanvas(window.innerWidth, window.innerHeight); 
}; 

var particles = new Array(new particle(1, 1, color(1, 1, 1), function() { 
    cosole.log("your mamma"); 
})); 

function draw() { 

}; 

これをブラウザで実行すると、上記のエラーメッセージが表示されます。あなたのHTMLがどのように見えるか疑問に思った場合、ここにあります:

<html> 
<head> 
    <meta charset="utf-8"> 
    <title>Test</title> 
    <script src="p5.min.js"></script> 
    <script src="p5_test.js"></script> 
</head> 
<style> 
    body {margin: none; padding: none;} 
</style> 
<body></body> 
</html> 

何か提案がありますか?

+0

もう一つは、グローバルなスコープでp5関数にアクセスすることができないことです。これは、 'draw'や' setup'のようなp5構造体の中にある必要があります。この場合、 'draw'や' setup'の外で 'color(1、1、1)'を使うことはできません。 –

+0

@ MasterYushiスケッチの上部に 'new p5()'があります。これにより 'setup()'が呼び出される前にP5関数を呼び出すことができます。 [wiki](https://github.com/processing/p5.js/wiki/Frequently-Asked-Questions#why-cant-i-assign-variables-using-p5-functions-and-variables-before-セットアップ)を参照してください。 –

+0

@KevinWorkmanはい、ありがとう、このスニペットの問題、* Uncaught TypeError:未定義*の '_colorMode'プロパティを読み取ることができません*は、グローバルスコープで 'color()'が呼び出されたためです。この問題を参照してください。(https://github.com/processing/p5.js/issues/1293) –

答えて

3

setup()が呼び出されるまで、P5関数を使用できないという制限を回避するために、オンデマンドのグローバルモードを使用しようとしているようです。私はあなたのコードが動作すると期待しています。私は、コードを実行すると

はしかし、私はこのエラーを取得する:

Uncaught TypeError: Cannot read property '_colorMode' of undefined 
    at new p5.Color (p5.js:6482) 
    at p5.color (p5.js:6174) 
    at sketch.js:17 

あなたは、ライブラリのバージョン縮小さを使用しているので、変数名には本当に便利ではありません。私は未修飾バージョンを使用しているので、実際の問題は_colorMode変数が見つからないことがわかります。コードをトレース

、私たちはあなたのコードがP5.jsのライン6174に当たるcolor()機能、呼び出すことがわかり:

return new p5.Color(this._renderer, arguments); 

P5.jsのライン6482に当たるp5.Colorコンストラクタを呼び出します。このことから

this.mode = renderer._colorMode; 

、我々はrenderer変数が定義されていないことを確認することができ、私たちはその_colorMode変数にアクセスしようとすると、我々は、エラーが発生します。

したがって、オンデマンドグローバルモードを使用していても、P5の内部renderer変数は定義されていないようです。オンデマンドのグローバルモードでは、random()のような単純な関数にアクセスできますが、レンダラーを初期化する必要がある関数にはアクセスできません。それは本当にあなたを助けていないので、

var particle = function(C) { 
     this.col = C; 
}; 

var particle; 

function setup() { 
    createCanvas(window.innerWidth, window.innerHeight); 
    particle = new particle(color(1, 1, 1)); 
} 

function draw() { 

} 

注意また、あなたのコードの先頭にnew p5()を取り除くことができます。

は自分 setup()機能にあなたの初期化を移動し、あなたの問題を解決するために、まったく。また、 MCVEを作成する目的でコードを簡略化しましたが、同じ考え方はメインプロジェクトにも当てはまるはずです。

+1

非常にきれいに(+1) –

+0

+1私は無視し、ちょうどwen'tとは - *あなたはこれを行うべきではない、物語の終わり*。しかし、OPが記述したように、彼のコンソールには* aが定義されていない*と表示されているエラーではありません:p –

+0

@MasterYushi OPはライブラリの縮小バージョンを使用しているためです。例えば、 '_colorMode'変数は' a'になります。 –

関連する問題