HTML5的全新功能我開始使用canvas進行遊戲。這是我的第一個畫布頁面。爲什麼我的HTML5頁面在從本地不在本地加載時崩潰
當您在本地運行它時(例如file:///),它完美地工作,但是當我將文件上傳到我的網絡主機時,頁面在加載時卡住。加載圖標正在旋轉,標題出現,但頁面主體永遠不會被檢索到,所以顯然它會卡在某處。
下面是我的代碼:
<!DOCTYPE html>
<html>
<head>
<title>1st Attempt - 2D Canvas</title>
<meta charset='utf-8'>
<script type="text/javascript">
window.addEventListener('load', function() {
canvas = document.getElementById('gamecanvas');
context = canvas.getContext('2d');
if(context){
// Load images and stuff
sprites = loadResources();
// Create player object
player = {"pos": {"x": 0, "y": 0}, "blockunder": sprites.grass};
// Draw a grid with a texture and stroke using my own awesome function
drawGrid(sprites.grass, false);
drawPlayer(0, 0);
// Define controls
window.onkeydown = function(event){
switch(event.which){
case 37: // ArrowLeft
movePlayer("left");
break;
case 38: // ArrowUp
movePlayer("up");
break;
case 39: // ArrowRight
movePlayer("right");
break;
case 40: // ArrowDown
movePlayer("down");
break;
}
}
}
}, false);
function loadResources(){
// Sprites
var grass = new Image();
grass.src = 'gfx/grass.png';
var player = new Image();
player.src = 'gfx/player.png';
console.log("Loaded all resources");
return {"player": player, "grass": grass};
}
function drawGrid(bgImage, drawStroke){
cellWidth = bgImage.width;
cellHeight = bgImage.height;
console.log("Texture dimensions are " + cellWidth + "x" + cellHeight + " pixels");
canvasWidth = context.canvas.getAttribute("width");
canvasHeight = context.canvas.getAttribute("height");
var curX = 0;
var curY = 0;
context.strokeStyle = '#444';
context.lineWidth = 1;
while(curX < canvasWidth){
while(curY < canvasHeight){
context.drawImage(bgImage, curX, curY);
if(drawStroke){
context.strokeRect(curX, curY, curX + cellWidth, curY + cellHeight);
}
curY += cellHeight;
}
curY = 0;
curX += cellWidth;
}
}
function movePlayer(direction){
switch(direction){
case "left":
drawPlayer(-cellWidth, 0);
break;
case "up":
drawPlayer(0, -cellWidth);
break;
case "right":
drawPlayer(cellWidth, 0);
break;
case "down":
drawPlayer(0, cellWidth);
break;
}
}
function drawPlayer(addX, addY){
addX = typeof addX !== 'undefined' ? addX : 0;
addY = typeof addY !== 'undefined' ? addY : 0;
context.drawImage(player.blockunder, player.pos.x, player.pos.y);
if(player.pos.x + addX >= 0 && player.pos.x + addX < canvasWidth){
player.pos.x += addX;
}
if(player.pos.y + addY >= 0 && player.pos.y + addY < canvasHeight){
player.pos.y += addY;
}
context.drawImage(sprites.player, player.pos.x, player.pos.y);
}
</script>
</head>
<body style="text-align: center;">
<h1>Run Steve!</h1>
<canvas id="gamecanvas" height="608" width="800">Canvas is not supported.</canvas>
</body>
</html>
我剛剛通過Chrome開發人員工具分析了您網頁的JS,'drawGrid()'佔用了所有處理時間的98%。我想你在那裏遇到了一個無限循環。 – ComFreek
@ComFreek如果是這樣,drawPlayer函數將不會運行,所以我不明白它是如何循環的。偶然的負載事件循環嗎? –
哦,drawPlayer沒有運行...對。 –