Javascript 为什么';图像没有出现吗?
我编写了以下代码并将其放入html测试仪中。应该出现一个图像: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
<!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)
你应该做些什么。因为您很可能希望背景图像不受影响