私は描画関数を定義するbird = {}オブジェクトを持っていますが、レンダリング関数で呼び出されたときに画像は表示されません。誰かが間違っていることを私に指摘できますか?前もって感謝します。JS画像がキャンバスに表示されない
編集:画面上に他のスプライトがあり、それらをオフにすると、常に鳥が表示されるため、常に表示されない理由がわかりました。これを解決できるものはありますか?ここK3Nの提案@続き
bird = {
draw:function() {
var birdimg = new Image();
birdimg.onload = function() {
ctx.drawImage(birdimg, -20, height - 200);
}
birdimg.src = "//i.stack.imgur.com/nsZLM.png"; //"assets/bird.png";
}
};
function main() {
canvas = document.createElement("canvas");
//Set the width and height to the sizes of the browser
width = window.innerWidth;
height = window.innerHeight;
//Frames the game if the width is larger than 500
if(width >=500){
width = 320;
height = 480;
canvas.style.border = "1px solid #000";
evt = "mousedown";
}
//Sets the canvas sizes to the width and height variables
canvas.width = width;
canvas.height = height;
ctx = canvas.getContext("2d");
//Set the default state
currentstate = states.Splash;
document.body.appendChild(canvas);
render();
}
function render(){
//Adding bird
bird.draw();
//Loads sky.png
bgimg = new Image();
bgimg.onload = function() {
ctx.drawImage(bgimg,-20,height-200);
ctx.drawImage(bgimg,256,height-200);
}
bgimg.src = "assets/sky.png";
//Loads land img
landimg = new Image();
landimg.onload = function() {
ctx.drawImage(landimg,0,height-100);
}
landimg.src = "assets/land.png";
//Creates rectangle that colors background. THIS IS THE BOTTOM LAYER. WRITE CODE ABOVE
ctx.fillStyle="#4ec0ca";
ctx.fillRect(0,0,canvas.width,canvas.height);
ctx.stroke();
}
メインに役立ちます)が呼び出されることはありませんか? '状態'は存在せず、資産はローカルコンピュータにのみ存在します(アップロードする必要があります)。変数を使用して値を格納することも検討してください。 – K3N
私はここに書きませんでしたが、元のコードにあります。元の質問については、親切に提案するものはありますか? – UpARiver
鳥の画像をアップロードすることができます(エディタで画像のアップロードボタンを使用してください)。代わりにimg srcをリンクすることで、鳥がキャンバスの範囲外に描画されているかどうかを確認できます。また、質問に含まれる例を省略して、実行可能( 'states'を使わずに、あるいは少なくとも定義された状態、main()などを呼び出す)。 – K3N