問題は私が最初に背景を描くことができず、背景の上に他のすべてを描くことができないということです。私のコードのいくつかの場所(ループ関数内)では動作しますが、私の初期化関数では動作しません。最初に私のコードに少し紹介:背景IMGを取得し、それを描画するためのjavascript:キャンバス上のイメージ描画(背景)
コード:
function imgImport(imgName,ctx){
var img = new Image();
img.onload = function(){
ctx.drawImage(img,0,0);
};
img.src = 'client/img/' + imgName + '.jpg';
}
module.exports = imgImport;
クール、今、私の初期化関数に私はこのような上記のコードを使用:
// var img = new Image();
// img.src = 'client/img/spaceship.jpg';
// ctx.drawImage(img,0,0);
Img('spaceship',ctx);
drawGrayzonePlanets(ctx,serverObjects);
を
コメントアウトされた3行を今は気にしないでください。最初のアクティブ行Img( 'spaceship'、ctx):nodejsを介して使用される上記のimgImport関数です。 DrawGrayzonePlanetsは以下見ることができます:
function drawGrayzonePlanets(ctx,serverObjects){
for(object in serverObjects){
obj = serverObjects[object];
Drawobjects(ctx,obj);
}
}
は、基本的に上記の機能は、サーバーからデータを取得し、このように見える、惑星を描画するDrawobjects()関数を使用しています。
今function drawObjects(ctx,status){
switch(status.shape){
case "circle":
var status = status.cic;
console.log(status);
ctx.fillStyle = status.color;
ctx.beginPath();
ctx.arc(status.x,status.y,status.planetSize,0,2*Math.PI);
ctx.stroke();
ctx.fill();
break;
}
}
module.exports = drawObjects;
私が実行した場合Img()関数は最初にdrawGrayzonePlanets()関数を実行した後、惑星はバックグラウンドの背後に描画され、見ることができません。明らかにコードの順序を変更しても同じことが起こります。今、私は3行のコメントを外してimg()関数からコメントを外してこの問題を解決する方法を見つけました。 drawGrayzonePlanets()関数を保持します。そうですね:
var img = new Image();
img.src = 'client/img/spaceship.jpg';
ctx.drawImage(img,0,0);
//Img('spaceship',ctx);
drawGrayzonePlanets(ctx,serverObjects);
上記のコードは動作し、惑星はバックグラウンドで描画されます。しかし、私はちょうどImg()関数を使用するだけでなく、そのメソッドが動作する理由を理解できません。それはimg.onload = function(){}かもしれませんが、私はなぜそれを見ることができませんか?
誰かが実際に何が起こっているのか説明できますか?
私はどこにも定義された 'Img'機能が表示されません。 – bejado
コードスニッパーまたはjsfiddleを作成できますか? – imudin07