Html 5网格绘制问题
Html 5 Grid Drawing Problem
//Set the number of rows and columns for the board
var rows = 10;
var columns = 10;
var offset= 0.5;
//Create the board, setting random squares to be obstacles
var board = [];
for (var x = 0; x < columns; x++)
{
board[x] = [];
for (var y = 0; y < rows; y++)
{
board[x][y] = 0;
}
}
function draw_grid(size, amount, ctx){
ctx.strokeStyle = "#FFF";
for (var i=0.5; i<size*amount+1; i+=size){
ctx.moveTo(0,i);
ctx.lineTo(size*amount, i);
ctx.moveTo(i,0);
ctx.lineTo(i, size*amount);
ctx.stroke();
}
}
function update_grid(grid, ctx){
ctx.fillStyle = "#000";
for (var i=0; i<grid.length; i+=1){
for (var a=0; a<grid[i].length; a+=1){
if (grid[i][a]==1){
ctx.fillRect((i*32)+offset, (a*32)+offset, 32, 32);
}
}
}
}
game_area = document.getElementById("a");
context = game_area.getContext('2d');
board[0][3] = 1;
function on_enter_frame(){
context.clearRect(0,0, game_area.width, game_area.height);
context.fillStyle = "#28F";
context.fillRect(0,0,500,500);
draw_grid(32, 10, context);
update_grid(board, context);
}
setInterval(on_enter_frame,30);
这段代码似乎占用了很多内存,有人知道为什么吗?刚开始用html5编程…我相信这和update_grid函数中的for循环有关,谢谢
只是一个建议,你在循环中做了很多计算,你的setInterval周期很短-你需要如此频繁地更新你的网格吗?
在你的draw_grid()函数你计算大小*金额3次,为什么不做一次在循环的外部作为一个局部变量和重用该变量,你需要它?
另一种方法做你的绘画可能是使用mozRequestAnimationFrame,它可能更有效,如果你需要做你的绘画如此频繁
game_area = document.getElementById("a");
context = game_area.getContext('2d');
这两个变量的声明都没有使用var关键字…这样做是危险的,并且可能导致内存泄漏,这取决于您如何使用它们。
这是前进的方向:
var game_area = document.getElementById("a");
var context = game_area.getContext('2d');
另外,最好不要访问全局变量,因为JavaScript VM必须进行查找,这是相当昂贵的。一个更好的方法是这样做:
function on_enter_frame(pContext, pGame_area, pBoard){
pContext.clearRect(0,0, pGame_area.width, pGame_area.height);
pContext.fillStyle = "#28F";
pContext.fillRect(0,0,500,500);
draw_grid(32, 10, pContext);
update_grid(pBoard, pContext);
}
然后使用当前作用域中已经存在的必要参数调用该方法:
on_enter_frame(context, game_area, board);
相关文章:
- 传单圆圈绘制/编辑问题
- 在three.js中绘制半个球体的问题
- 服务器编码的JSON数据出现问题,无法绘制图表
- 绘制图表.js包含 ajax 数据和响应式.一些问题和疑问
- 谷歌图表进入JQuery Tab绘制问题
- 绘制形状与形状问题
- Highchart:从 java 传递系列映射时绘制日期时间图表问题
- 绘制 C3 图表时的 JSON 到数组问题
- flot 绘制时间戳问题
- D3JS绘制SVG矩形和线条问题
- 使用谷歌方向 API 问题绘制超过 8 个航点的路线图
- Javascript HTML5 Canvas 绘制路径问题
- Canvas drawImage无法在Cordova中绘制,安全问题
- 绘制图像后获取画布数据时出现问题
- 绘制图形时清除画布的问题
- 这个函数有什么问题,我正在重新绘制我的数据表
- 地图的问题:用2个坐标绘制路线
- 关于使用鼠标(移动事件)用quintus引擎绘制线条的几个问题
- Html 5网格绘制问题
- 在Highcharts 3D散点图中重新绘制问题