0

好吧,我正在使用 HTML5 画布用 js 编写一个小游戏。我在一个 html 文件中获得了画布和标签,在一个名为 java.js 的单独文件中获得了 javascript。

我在脚本中的某个时刻收到了一些警报,以了解当我将 html 加载到浏览器中时它是否运行。问题是它没有显示任何这些并且 javascript 没有加载。

最奇怪的是萤火虫所做的:在“HTML”下,当我单击标签时,它会显示完整的脚本,但在“脚本”下,它会告诉我页面上没有 javascript。

帮助?

我的html:

    <body><canvas id="canvas" width="1000px" height="500px" style="border:1px solid #c3c3c3;">text</canvas>
<script type="text/javascript" src="java.js">
</script></body>

当我将脚本标签放在头部时:

<head><script type="text/javascript" src="java.js">
    </script></head> 
<body><canvas id="canvas" width="1000px" height="500px" style="border:1px solid #c3c3c3;">text</canvas>
    </body>

我的js:

alert('define');
var scrollx=0,
scrolly=0,
keyID=0,
global = {};
global.players=[];
global.playermap=[];
var c=document.getElementById("canvas"),
ctx=c.getContext('2d');
alert('init');

function pony (x,y, hspd, vspd) {
alert("pony created!");
this.x = x;
this.y = y;
this.vsp = vspd;
this.hspd = hspd;
this.image = new Image();
this.image.src = "alien.png";
this.framenumber = 11;
this.frameactual = 1;
this.framespeed=0.8;
this.frametime =50;
this.framewidth = this.image.width / this.framenumber;
this.frameheight = this.image.height;
this.colorbody="#000000";
//
this.nextframe = function() {
this.frameactual=this.frameactual+this.framespeed;
if (Math.round(this.frameactual)>this.framenumber){this.frameactual=1;}
this.draw();
};
//
this.draw = function() {
this.frame=Math.round(this.frameactual);
ctx.drawImage(this.image,(this.frame-1)*this.framewidth,0,this.framewidth,this.image.height,this.x-scrollx-(this.framewidth/2),this.y-scrolly-(this.image.height/2),this.framewidth,this.image.height);
};
//
//var _this=this;
//this.frametimer=setInterval(function(){_this.nextframe();},this.frametime);
alert("time set");
}
//
function setpos_player(id,x,y,hspd,vspd){
alert("this");
if (typeof(global.playermap[id])=="undefined"){
global.players.push(new pony (x,y, hspd, vspd));
global.playermap[id]=global.players.length;}
else{
global.players[global.playermap[id]].x=x;
global.players[global.playermap[id]].y=y;
global.players[global.playermap[id]].hspd=hspd;
global.players[global.playermap[id]].vspd=vspd;}
}
//
function clear(){
    ctx.fillStyle = "#FFFFFF";
    ctx.beginPath();
    ctx.rect(0,0,1000,1000);
    ctx.closePath();
    ctx.fill();}

document.onkeypress = KeyCheck; 
document.onkeydown = KeyCheck;     
document.onkeyup = KeyRelease;   

function KeyCheck(e)

{
   keyID = (window.event) ? event.keyCode : e.keyCode;
   }
function KeyRelease(e)
{keyID=0;}

//
function step(){
clear();
for (var i = 0; i < global.players.length; i++) {
    _this=global.players[i];
    _this.y+=_this.vspd;
    _this.nextframe();
    //Do something
}
//global.players[1].nextframe();
timer=setTimeout(function(){step();},80);
}
setpos_player(1,200,200,0,1);
var timer=setTimeout(function(){step();},80);
4

4 回答 4

4

似乎你在这里有一个错误:

if (typeof(global.playermap[id])="undefined"){

应该

if (typeof(global.playermap[id])=="undefined"){

另外,尝试替换所有alert调用console.log,然后检查控制台是否有错误

于 2012-05-03T06:35:46.533 回答
0

在 html 中使用之前声明脚本,您可以像这样将该脚本放在页面的头部

<head>
<script type='text/javascript' src='java.js'></script>
</head>

尝试一次并在此处重播

于 2012-05-03T06:30:41.147 回答
0
if (typeof(global.playermap[id])="undefined"){

if (typeof global.playermap[id] == "undefined"){
于 2012-05-03T06:37:25.310 回答
-1

尝试为 .js 文件放置正确的目录路径。例如,它可能是 /java.js 或“/scripts/java.js”。

是否已加载 javascript 的指示将是您的警报是否弹出。

此外,您应该知道应该在 HEAD 部分添加带有外部 .js 的脚本标签。

于 2012-05-03T06:26:18.373 回答