【发布时间】:2015-10-16 09:40:09
【问题描述】:
我正在尝试从图块集中加载精灵,并将它们加载到 HTML5 画布中。
问题是坐标不等于图像的大小(它被拉伸了)
我所有的图片都是 64x64 像素。 (1080p 分辨率预览:)如您所见,画布正在拉伸这些 64x64 图像。
所有代码: HTML:
<html>
<head>
<link rel="stylesheet" href="css/reset.css" />
<link rel="stylesheet" href="css/board.css" />
<script src="js/ext/jquery.js"></script>
<script src="js/game.js"></script>
</head>
<body>
<canvas id="GameBoard"></canvas>
</body>
</html>
CSS:
#GameBoard {
width: 100vw;
height: 100vh;
border: 1px solid white;
}
JavaScript:
$(document).ready(function()
{
createWorld();
});
function createWorld()
{
var TileSets = loadTiles();
drawWorld(TileSets);
}
var chunks =
[
[[0],[0],[0],[0],[0]],
[[0],[1],[0],[1],[0]],
[[0],[1],[0],[1],[0]],
[[0],[1],[0],[1],[0]],
[[0],[0],[0],[0],[0]]
];
var tiles =
[
{ tileid: 0, tileset: 1, tilerow: 0, tilecolumn: 0},
{ tileid: 1, tileset: 1, tilerow: 0, tilecolumn: 1}
]
var tilesets =
[
{ tilesetid: 0, tilesrc: "static/tiles/tileset0.png", description:"OLD" },
{ tilesetid: 1, tilesrc: "static/tiles/tileset1.png", description:"New TEST" }
]
function loadTiles()
{
var tiless = [];
for(var i = 0; i < tilesets.length; i++)
{
var img = new Image();
img.src = tilesets[i].tilesrc;
tiless.push(img);
}
return tiless;
}
function drawWorld(TileSets)
{
var WorldData = chunks;
var canvas = document.getElementById("GameBoard");
var counter = 0;
for(var i = 0; i < WorldData.length; i++)
{
for(var j = 0; j < WorldData[i].length; j++)
{
counter++;
var ctx = canvas.getContext("2d");
var tileid = WorldData[i][j];
var tilerow = tiles[tileid].tilerow;
var tilecolumn = tiles[tileid].tilecolumn;
console.log("DRAWN: " + counter + " FROM SET: " + tilerow + "x" + tilecolumn + " AT: " + i + "x" + j);
ctx.drawImage(TileSets[1], 64 * tilecolumn , 64 * tilerow, 64, 64, 64 * j, 64 * i, 64, 64);
}
}
}
那么有什么方法,JavaScript、CSS 或其他方法可以使画布的网格大小为 64 x 64,以便图像以自己的比例放置在彼此相邻的位置。
【问题讨论】:
标签: javascript html html5-canvas