Javascript 为什么';图像没有出现吗?

Javascript 为什么';图像没有出现吗?,javascript,Javascript,我编写了以下代码并将其放入html测试仪中。应该出现一个图像: <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>Gamedev Canvas Workshop</title> </head> <body> <canvas id="myCanvas" width="500" height="500"></c

我编写了以下代码并将其放入html测试仪中。应该出现一个图像:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Gamedev Canvas Workshop</title>

</head>
<body>

<canvas id="myCanvas" width="500" height="500"></canvas>

<script>
var canvas = document.getElementById("myCanvas");
var ctx = canvas.getContext("2d");
var heroRadius = 20;
var heroX = 50;
var heroY = 50;
var upPressed = false;
var downPressed = false;
var leftPressed = false;
var rightPressed = false;
var heroSpeed = 2;

document.addEventListener("keydown", keyDownHandler, false);
document.addEventListener("keyup", keyUpHandler, false);

function keyDownHandler(e) {
if(e.keyCode == 87) {
    upPressed = true;
}
else if(e.keyCode == 83) {
    downPressed = true;
}
else if(e.keyCode == 65){
    leftPressed = true;
}
else if(e.keyCode == 68){
    rightPressed = true;
}
}

function keyUpHandler(e) {
if(e.keyCode == 87) {
    upPressed = false;
}
else if(e.keyCode == 83) {
    downPressed = false;
}
else if(e.keyCode == 65) {
    leftPressed = false;
}
else if(e.keyCode = 68) {
    rightPressed = false;
}
}

function drawHero() {
  var imageObj = new Image();

  imageObj.onload = function() {
    ctx.drawImage(imageObj, 69, 100);
  };
  imageObj.src = 'http://www.html5canvastutorials.com/demos/assets/darth-vader.jpg';
}

function draw() {
ctx.clearRect(0, 0, canvas.width, canvas.height);
drawHero();

requestAnimationFrame(draw);
}
draw();
</script>

</body>
</html>

Gamedev画布研讨会
var canvas=document.getElementById(“myCanvas”);
var ctx=canvas.getContext(“2d”);
var半径=20;
var-heroX=50;
var heroY=50;
var upPressed=假;
var-downPressed=false;
var leftPressed=false;
var-rightspressed=false;
速度=2;
文档。addEventListener(“keydown”,keyDownHandler,false);
文件。addEventListener(“keyup”,keyUpHandler,false);
函数keyDownHandler(e){
如果(e.keyCode==87){
upPressed=true;
}
否则如果(e.keyCode==83){
downPressed=true;
}
否则如果(e.keyCode==65){
leftPressed=true;
}
否则如果(e.keyCode==68){
rightspressed=true;
}
}
函数keyUpHandler(e){
如果(e.keyCode==87){
upPressed=false;
}
否则如果(e.keyCode==83){
按下=假;
}
否则如果(e.keyCode==65){
leftPressed=false;
}
否则,如果(e.keyCode=68){
右压=假;
}
}
函数drawHero(){
var imageObj=新图像();
imageObj.onload=函数(){
ctx.drawImage(imageObj,69100);
};
imageObj.src=http://www.html5canvastutorials.com/demos/assets/darth-vader.jpg';
}
函数绘图(){
clearRect(0,0,canvas.width,canvas.height);
drawHero();
请求动画帧(绘制);
}
draw();
由于某种原因,它似乎不起作用。我想用一个图像做一个游戏,我把它作为练习。如果删除requestAnimationFrame,则会显示该图像,但在添加运动时需要该图像。为什么图像没有出现? 谢谢

这部分

function drawHero() {
  var imageObj = new Image();

  imageObj.onload = function() {
    ctx.drawImage(imageObj, 69, 100);
  };
  imageObj.src = 'http://www.html5canvastutorials.com/demos/assets/darth-vader.jpg';
}
不要这样做。 每个帧都需要等待加载完成。 相反,首先创建一个init函数并将其附加到body的onload事件。 在这个函数中,用达斯维德的src填充一个类级图像变量

var imageObj = new Image();
function init(){
   imageObj.src='http://www.html5canvastutorials.com/demos/assets/darth-vader.jpg';
}
然后在你的画循环中,就是这样

function drawHero() {  
    ctx.drawImage(imageObj, 69, 100);  
}
Canvas实际上并不关心图像是否尚未加载,因此您不需要将onload事件附加到它


此外,尽管还不够远,但不要绘制到显示画布。绘制到隐藏画布,然后将完成的隐藏画布绘制到显示画布。这将提供更好的性能。

您的图像不会显示,因为您没有调用图像对象的加载方法。您只指定了在发生特定事件时它必须执行的操作(此处为加载)

以下是工作代码:

function draw() {
ctx.clearRect(0, 0, canvas.width, canvas.height);
drawHero();
imageObj.load()

requestAnimationFrame(draw);
}

但是,我建议您在架构方面遵循其他贡献者给出的建议。

您正在调用
requestAnimationFrame(draw)draw
函数中,code>每秒调用
draw
函数约60次。在
draw
函数中,您还有
ctx.clearRect(0,0,canvas.width,canvas.height)正在清除画布。因此,您的图像将不会显示。我只涉猎过canvas的使用,所以我绝对不是专家,但这是代码中的问题

。我所做的只是在
draw
函数中注释掉requestAnimationFrame(draw)

你应该做些什么。因为您很可能希望背景图像不受影响