だから、HTML5を使ってミニクラフトのウェブサイトのテーマを作りたいと思います。私は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
キャンバスを見て、それが期待していたスペースを占めていることを確認しましたか?たとえば、 'width:100%'と 'height:100%'を省略し、代わりに 'right:0;ウィンドウ全体を伸ばします(これは 'position:fixed'で動作するはずです)。それ以外の場合は、100%の幅と高さを達成するために行う必要があります。 – Jeremy