所以,我想创建一个使用HTML5的minecraft网站主题。我在HTML5/Javascript中有点不稳定(有一段时间没有用过),我需要一些帮助。我正在尝试计算可以放在屏幕上的16x16px数量的瓷砖。然后,为屏幕背景随机“生成地图”。然后,我使用相同的2 for循环来生成地图,以填充画面(在生成过程中分配画面路径)。问题是,画布完全是白色的。任何人都可以挑出问题,如果可能的话给我任何提示?提前致谢!这里是我的HTML5代码:HTML5在画布上使用for循环绘制图片?
<!DOCTYPE html>
<html>
<head>
<title>Minecraft Background Check</title>
</head>
<body>
<canvas id="bg" style="position:fixed; top:0; left:0; border:1px solid #c3c3c3; width: 100%; height: 100%;"></canvas>
<script type="text/javascript">
"use strict";
var c = document.getElementById("bg");
var ctx = c.getContext("2d");
ctx.canvas.width = window.innerWidth;
ctx.canvas.height = window.innerHeight;
var width = Math.ceil(window.innerWidth/16);
var height = Math.ceil(window.innerHeight/16);
for (var x=0;x<width;x++)
{
for(var y=0;y<height;y++)
{
var rand = Math.floor(Math.random()*11);
var texLoc = getImageNameFromRand(rand,y,height);
var img=new Image();
img.onload = function(){
return function() {
ctx.drawImage(img,x*16,y*16);
};
};
img.src=texLoc;
}
}
function getImageNameFromRand(rand,yVal,maxY)
{
var dirt = 'dirt.png';
var stone = 'stone.png';
var cobble = 'cobble.png';
var mosscobble = 'mosscobble.png';
var bedrock = 'bedrock.png';
if(yVal===0)
{
return dirt;
} else if(yVal<3)
{
if(rand < 7) {
return dirt; }
else {
return stone; }
} else if(yVal<5)
{
if(rand < 4) {
return dirt; }
else {
return stone; }
} else if(yVal<maxY-2)
{
if(rand === 0) {
return dirt; }
else if(rand < 4) {
return cobble; }
else if(rand < 5) {
return mosscobble; }
else {
return stone; }
} else if(yVal<maxY-1)
{
if(rand < 4) {
return bedrock; }
else {
return stone; }
} else if(yVal<maxY)
{
if(rand < 7) {
return bedrock; }
else {
return stone; }
} else {
return bedrock; }
return bedrock;
}
</script>
</body>
</html>
谢谢,但我仍然得到一个空白的画布。还有什么不对吗?再次感谢。 – Flafla2 2012-03-07 01:32:40
您是否检查过画布以确保它占据您期望的空间?例如,我会抛弃'width:100%'和'height:100%',而使用'right:0;底部:0'使它伸展整个窗口(这应该适用于'position:fixed')。否则,还有一大堆你必须做的事情来达到100%的宽度和高度。 – Jeremy 2012-03-07 01:55:36