无法使用 getContext 将图像渲染到游戏的 Canvas 上
Cannot Render Images onto Canvas for Game Using getContext
我有以下代码。我正在尝试让我的 HTML 站点在我的 canvas 上呈现背景图像 (bg) 和管道图像(pipeNorth 和 pipeSouth)。
我正在使用 chrome。
第一次密码尝试
<!DOCTYPE html>
<html>
<head>
<title>Flappy Bird using JS | by Pinzhi</title>
</head>
<body>
<h3>flappyBird by pineNuts</h3>
<canvas id="canvas" width="288" height="512"></canvas>
<script>
var cvs = document.getElementById("canvas")
var ctx = cvs.getContext("2d");
// create variables
var gap = 75;
var constant = pipeNorth.height + gap;
// load images
var bird = new Image();
var bg = new Image();
var fg = new Image();
var pipeNorth = new Image();
var pipeSouth = new Image();
bird.src = "/home/pinzhi/Desktop/js_games/flappy_bird/templates/images/bird.png";
bg.src = "/home/pinzhi/Desktop/js_games/flappy_bird/templates/images/bg.png";
//fg.src = "images/fg.png";
pipeNorth.src = "images/pipeNorth.png";
pipeSouth.src = "images/pipeSouth.png";
// draw images
function draw(){
ctx.drawImage(bg, 0, 0);
ctx.drawImage(pipeNorth, 100, 0);
ctx.drawImage(pipeSouth, 100, 0 + constant)
}
draw();
</script>
</body>
</html>
第二次密码尝试
<!DOCTYPE html>
<html>
<head>
<title>Flappy Bird using JS | by Pinzhi</title>
</head>
<body>
<h3>flappyBird by pineNuts</h3>
<canvas id="canvas" width="288" height="512"></canvas>
<script>
var cvs = document.getElementById("canvas")
var ctx = cvs.getContext("2d");
// create variables
var gap = 75;
var constant = pipeNorth.height + gap;
// load images
var bird = new Image();
var bg = new Image();
var fg = new Image();
var pipeNorth = new Image();
var pipeSouth = new Image();
bg.onload = function(e) {
ctx.drawImage(e.target, 0, 0);
}
pipeNorth.onload = function(e) {
ctx.drawImage(e.target, 100, 0);
}
pipeSouth.onload = function(e) {
ctx.drawImage(e.target, 100, 0 + constant);
}
bg.src = "/home/pinzhi/Desktop/js_games/flappy_bird/templates/images/bg.png";
pipeNorth.src = "images/pipeNorth.png";
pipeSouth.src = "images/pipeSouth.png";
// // draw images
// function draw(){
// ctx.drawImage(bg, 0, 0);
// ctx.drawImage(pipeNorth, 100, 0);
// ctx.drawImage(pipeSouth, 100, 0 + constant)
// }
// draw();
</script>
</body>
</html>
但是无论我怎样尝试,我都无法显示图像。我的代码在模板文件夹中。模板文件夹包含一个名为 "images" 的子文件夹,其中包含我的图片。
我做错了什么?
发生这种情况是因为您试图在设置图像的 .src 属性 后立即绘制它们。此时它可能还没有加载,所以你需要等待 onload 事件,然后再调用 drawImage()。
bg.onload = function(e) {
ctx.drawImage(e.target, 0, 0);
}
pipeNorth.onload = function(e) {
ctx.drawImage(e.target, 100, 0);
}
pipeSouth.onload = function(e) {
ctx.drawImage(e.target, 100, 0 + constant);
}
bg.src = "/home/pinzhi/Desktop/js_games/flappy_bird/templates/images/bg.png";
pipeNorth.src = "images/pipeNorth.png";
pipeSouth.src = "images/pipeSouth.png";
这是一个使用您的代码的示例:
var cvs = document.getElementById("canvas")
var ctx = cvs.getContext("2d");
var constant;
// create variables
var gap = 75;
// load images
var bird = new Image();
var bg = new Image();
var fg = new Image();
var pipeNorth = new Image();
var pipeSouth = new Image();
var imagesLoaded = 0;
bg.onload = function(e) {
imagesLoaded++;
draw();
}
pipeNorth.onload = function(e) {
imagesLoaded++;
constant = pipeNorth.height + gap;
draw();
}
pipeSouth.onload = function(e) {
imagesLoaded++;
draw();
}
function draw() {
if (imagesLoaded == 3) {
ctx.drawImage(bg, 0, 0);
ctx.drawImage(pipeNorth, 100, 0);
ctx.drawImage(pipeSouth, 100, 0 + constant);
}
}
bg.src = "https://picsum.photos/id/719/288/512";
pipeNorth.src = "https://picsum.photos/id/71/64/64";
pipeSouth.src = "https://picsum.photos/id/76/64/64";
<canvas id="canvas" width="288" height="512"></canvas>
我有以下代码。我正在尝试让我的 HTML 站点在我的 canvas 上呈现背景图像 (bg) 和管道图像(pipeNorth 和 pipeSouth)。
我正在使用 chrome。
第一次密码尝试
<!DOCTYPE html>
<html>
<head>
<title>Flappy Bird using JS | by Pinzhi</title>
</head>
<body>
<h3>flappyBird by pineNuts</h3>
<canvas id="canvas" width="288" height="512"></canvas>
<script>
var cvs = document.getElementById("canvas")
var ctx = cvs.getContext("2d");
// create variables
var gap = 75;
var constant = pipeNorth.height + gap;
// load images
var bird = new Image();
var bg = new Image();
var fg = new Image();
var pipeNorth = new Image();
var pipeSouth = new Image();
bird.src = "/home/pinzhi/Desktop/js_games/flappy_bird/templates/images/bird.png";
bg.src = "/home/pinzhi/Desktop/js_games/flappy_bird/templates/images/bg.png";
//fg.src = "images/fg.png";
pipeNorth.src = "images/pipeNorth.png";
pipeSouth.src = "images/pipeSouth.png";
// draw images
function draw(){
ctx.drawImage(bg, 0, 0);
ctx.drawImage(pipeNorth, 100, 0);
ctx.drawImage(pipeSouth, 100, 0 + constant)
}
draw();
</script>
</body>
</html>
第二次密码尝试
<!DOCTYPE html>
<html>
<head>
<title>Flappy Bird using JS | by Pinzhi</title>
</head>
<body>
<h3>flappyBird by pineNuts</h3>
<canvas id="canvas" width="288" height="512"></canvas>
<script>
var cvs = document.getElementById("canvas")
var ctx = cvs.getContext("2d");
// create variables
var gap = 75;
var constant = pipeNorth.height + gap;
// load images
var bird = new Image();
var bg = new Image();
var fg = new Image();
var pipeNorth = new Image();
var pipeSouth = new Image();
bg.onload = function(e) {
ctx.drawImage(e.target, 0, 0);
}
pipeNorth.onload = function(e) {
ctx.drawImage(e.target, 100, 0);
}
pipeSouth.onload = function(e) {
ctx.drawImage(e.target, 100, 0 + constant);
}
bg.src = "/home/pinzhi/Desktop/js_games/flappy_bird/templates/images/bg.png";
pipeNorth.src = "images/pipeNorth.png";
pipeSouth.src = "images/pipeSouth.png";
// // draw images
// function draw(){
// ctx.drawImage(bg, 0, 0);
// ctx.drawImage(pipeNorth, 100, 0);
// ctx.drawImage(pipeSouth, 100, 0 + constant)
// }
// draw();
</script>
</body>
</html>
但是无论我怎样尝试,我都无法显示图像。我的代码在模板文件夹中。模板文件夹包含一个名为 "images" 的子文件夹,其中包含我的图片。
我做错了什么?
发生这种情况是因为您试图在设置图像的 .src 属性 后立即绘制它们。此时它可能还没有加载,所以你需要等待 onload 事件,然后再调用 drawImage()。
bg.onload = function(e) {
ctx.drawImage(e.target, 0, 0);
}
pipeNorth.onload = function(e) {
ctx.drawImage(e.target, 100, 0);
}
pipeSouth.onload = function(e) {
ctx.drawImage(e.target, 100, 0 + constant);
}
bg.src = "/home/pinzhi/Desktop/js_games/flappy_bird/templates/images/bg.png";
pipeNorth.src = "images/pipeNorth.png";
pipeSouth.src = "images/pipeSouth.png";
这是一个使用您的代码的示例:
var cvs = document.getElementById("canvas")
var ctx = cvs.getContext("2d");
var constant;
// create variables
var gap = 75;
// load images
var bird = new Image();
var bg = new Image();
var fg = new Image();
var pipeNorth = new Image();
var pipeSouth = new Image();
var imagesLoaded = 0;
bg.onload = function(e) {
imagesLoaded++;
draw();
}
pipeNorth.onload = function(e) {
imagesLoaded++;
constant = pipeNorth.height + gap;
draw();
}
pipeSouth.onload = function(e) {
imagesLoaded++;
draw();
}
function draw() {
if (imagesLoaded == 3) {
ctx.drawImage(bg, 0, 0);
ctx.drawImage(pipeNorth, 100, 0);
ctx.drawImage(pipeSouth, 100, 0 + constant);
}
}
bg.src = "https://picsum.photos/id/719/288/512";
pipeNorth.src = "https://picsum.photos/id/71/64/64";
pipeSouth.src = "https://picsum.photos/id/76/64/64";
<canvas id="canvas" width="288" height="512"></canvas>