Javascript HTML画布游戏不显示

Javascript HTML画布游戏不显示,javascript,html,canvas,Javascript,Html,Canvas,我正在尝试建立一个简单的游戏。我使用谷歌浏览器作为我的浏览器。当我检查元素时,画布是存在的,如果我使用Dev工具并在脚本的开头放置一个断点,我可以按照编写代码的方式完成代码,并且我的所有图像都存在。为什么不显示 <html> <head> <title>canvasGame</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-widt

我正在尝试建立一个简单的游戏。我使用谷歌浏览器作为我的浏览器。当我检查元素时,画布是存在的,如果我使用Dev工具并在脚本的开头放置一个断点,我可以按照编写代码的方式完成代码,并且我的所有图像都存在。为什么不显示

<html>
<head>
<title>canvasGame</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script>
// Create the canvas
var canvas = document.createElement("canvas");
var ctx = canvas.getContext("2d");
canvas.width = 512;
canvas.height = 480;
document.body.appendChild(canvas);
// Background image
var bgReady = false;
var bgImage = new Image();
bgImage.onload = function () {
bgReady = true;
};
bgImage.src = "images/background.png";
// Game objects
var hero = {
speed: 256, // movement in pixels per second
x: 0,
y: 0
};
var monster = {
x: 0,
y: 0
};
var monstersCaught = 0;
// Handle keyboard controls
var keysDown = {};

addEventListener("keydown", function (e) {
keysDown[e.keyCode] = true;
}, false);

addEventListener("keyup", function (e) {
delete keysDown[e.keyCode];
}, false);
// Reset the game when the player catches a monster
var reset = function () {
hero.x = canvas.width / 2;
hero.y = canvas.height / 2;

// Throw the monster somewhere on the screen randomly
monster.x = 32 + (Math.random() * (canvas.width - 64));
monster.y = 32 + (Math.random() * (canvas.height - 64));
};
// Update game objects
var update = function (modifier) {
if (38 in keysDown) { // Player holding up
hero.y -= hero.speed * modifier;
}
if (40 in keysDown) { // Player holding down
hero.y += hero.speed * modifier;
}
if (37 in keysDown) { // Player holding left
hero.x -= hero.speed * modifier;
}
if (39 in keysDown) { // Player holding right
hero.x += hero.speed * modifier;
}

// Are they touching?
if (
hero.x <= (monster.x + 32)
&& monster.x <= (hero.x + 32)
&& hero.y <= (monster.y + 32)
&& monster.y <= (hero.y + 32)
) {
++monstersCaught;
reset();
}
};
// Draw everything
var render = function () {
if (bgReady) {
ctx.drawImage(bgImage, 0, 0);
}

if (heroReady) {
ctx.drawImage(heroImage, hero.x, hero.y);
}

if (monsterReady) {
ctx.drawImage(monsterImage, monster.x, monster.y);
}

// Score
ctx.fillStyle = "rgb(250, 250, 250)";
ctx.font = "24px Helvetica";
ctx.textAlign = "left";
ctx.textBaseline = "top";
ctx.fillText("Monsterrs caught: " + monstersCaught, 32, 32);
};
// The main game loop
var main = function () {
var now = Date.now();
var delta = now - then;

update(delta / 1000);
render();

then = now;

// Request to do this again ASAP
requestAnimationFrame(main);
};
// Cross-browser support for requestAnimationFrame
var w = window;
requestAnimationFrame = w.requestAnimationFrame || w.webkitRequestAnimationFrame || w.msRequestAnimationFrame || w.mozRequestAnimationFrame;
// Let's play this game!
var then = Date.now();
reset();
main();

</script>
</head>
<body>
<div></div>
</body>
</html>

拉票游戏
//创建画布
var canvas=document.createElement(“canvas”);
var ctx=canvas.getContext(“2d”);
canvas.width=512;
canvas.height=480;
document.body.appendChild(画布);
//背景图像
var bgrady=false;
var bgImage=新图像();
bgImage.onload=函数(){
bgrady=true;
};
bgImage.src=“images/background.png”;
//游戏物品
var hero={
速度:256,//以像素/秒为单位移动
x:0,,
y:0
};
变量怪物={
x:0,,
y:0
};
var monstersCaught=0;
//处理键盘控制
var keysDown={};
addEventListener(“向下键控”,函数(e){
keysDown[e.keyCode]=真;
},假);
addEventListener(“键控”,函数(e){
删除keysDown[e.keyCode];
},假);
//当玩家抓到怪物时重置游戏
变量重置=函数(){
hero.x=canvas.width/2;
hero.y=canvas.height/2;
//随机将怪物扔到屏幕上的某个地方
monster.x=32+(Math.random()*(canvas.width-64));
monster.y=32+(Math.random()*(canvas.height-64));
};
//更新游戏对象
变量更新=函数(修饰符){
如果(38键向下){//玩家举起
hero.y-=hero.speed*修饰符;
}
如果(40英寸向下键){//玩家按住
hero.y+=hero.speed*修改器;
}
如果(37英寸向下键){//玩家左握
hero.x-=hero.speed*修改器;
}
如果(39键向下){//玩家保持右侧
hero.x+=hero.speed*修改器;
}
//他们在动吗?
如果(
hero.x检查错误控制台始终是调试的第一步,并准确解释了发生的情况:
document.body
此时不存在

你的选择包括:

  • 将脚本移动到文档的最底部
  • 将脚本包装在
    onload
    事件中
检查错误控制台始终是调试的第一步,并准确地解释了发生的情况:
document.body
此时不存在

你的选择包括:

  • 将脚本移动到文档的最底部
  • 将脚本包装在
    onload
    事件中

就像Jeremy J Starcher所说的
文档。body
尚未退出。而且您的变量
heroReady
至少没有定义。。。 检查该教程的完整代码


拉票游戏
函数rungame(){
//创建画布
var canvas=document.createElement(“canvas”);
var ctx=canvas.getContext(“2d”);
canvas.width=512;
canvas.height=480;
document.body.appendChild(画布);
//背景图像
var bgrady=false;
var bgImage=新图像();
bgImage.onload=函数(){
bgrady=true;
};
bgImage.src=”https://raw.githubusercontent.com/lostdecade/simple_canvas_game/master/images/background.png";
//英雄形象
var-heroredy=false;
var-mage=新图像();
heroMage.onload=函数(){
heroReady=true;
};
heroMage.src=”https://raw.githubusercontent.com/lostdecade/simple_canvas_game/master/images/hero.png";
//怪物形象
var=false;
var monsterImage=新图像();
monsterImage.onload=函数(){
monsterReady=true;
};
monsterImage.src=”https://raw.githubusercontent.com/lostdecade/simple_canvas_game/master/images/monster.png";
//游戏物品
var hero={
速度:256//以像素/秒为单位移动
};
var={};
var monstersCaught=0;
//处理键盘控制
var keysDown={};
addEventListener(“向下键控”,函数(e){
keysDown[e.keyCode]=真;
},假);
addEventListener(“键控”,函数(e){
删除keysDown[e.keyCode];
},假);
//当玩家抓到怪物时重置游戏
变量重置=函数(){
hero.x=canvas.width/2;
hero.y=canvas.height/2;
//随机将怪物扔到屏幕上的某个地方
monster.x=32+(Math.random()*(canvas.width-64));
monster.y=32+(Math.random()*(canvas.height-64));
};
//更新游戏对象
变量更新=函数(修饰符){
如果(38键向下){//玩家举起
hero.y-=hero.speed*修饰符;
}
如果(40英寸向下键){//玩家按住
hero.y+=hero.speed*修改器;
}
如果(37英寸向下键){//玩家左握
hero.x-=hero.speed*修改器;
}
如果(39键向下){//玩家保持右侧
hero.x+=hero.speed*修改器;
}
//他们在动吗?
如果(

hero.x就像Jeremy J Starcher所说的
document.body
还没有退出。而且您的变量
heroReady
至少没有定义。。。 检查该教程的完整代码


拉票游戏
函数rungame(){
//创建画布
var canvas=document.createElement(“canvas”);
var ctx=canvas.getContext(“2d”);
canvas.width=512;
canvas.height=480;
document.body.appendChild(画布);
//背景图像
var bgrady=false;
var bgImage=新图像();
bgImage.onload=函数(){
bgrady=true;
};
bgImage.src=”https://raw.githubusercontent.com/lostdecade/simple_canvas_game/master/images/background.png";
//英雄形象
var-heroredy=false;
var-mage=新图像();
heroMage.onload=函数(){
heroReady=true;
};
heroMage.src=”https://raw.githubusercontent.com/lostdecade/simple_canvas_game/master/images/hero.png";
//怪物形象
document.body.appendChild(canvas);