我在使用Conways Game of Life的javascript + canvas实现时出现问题。 细胞被创建得很好,并且代表细胞的画布盒子也被渲染得很好。但是在某个地方,所有细胞似乎都处于活跃状态。不是在切换。 对于我的生活,我无法理解什么是错的。 javascript代码为here,我的实现为here。 有人可以告诉我哪里出错了。
的 的 ** * ** * ** * 的** * ** * ** * ** * *** 修改的 * ** * ** * ** * ** * ** * ** * ** * **
我想我已经弄清楚什么是错的。我将2d数组的元素传递给reallyToggle()函数,就像这样 -
var reallyToggle = function(a) {
//code
}
reallyToggle(cell[i][j]);
我认为问题出在这部分代码中。任何人都可以告诉我如何将数组元素传递给函数?
答案 0 :(得分:1)
这条线很可疑:)
if (!run) run == true;
答案 1 :(得分:1)
所以你的代码很晦涩,过于复杂,说实话。创建自定义Javascript函数对象的网格是过度工程的方式:您只需要一个2D布尔数组。
如果被认为是两个独立的问题:问题空间和世界空间,这样的问题通常最容易解决。问题空间是您解决实际问题的区域。世界空间是映射到视觉结果的问题空间。为了解决你的问题,将问题空间想象为布尔的二维数组,然后世界空间就是你的画布。
如果您想稍微清理一下模拟,这可能会有所帮助:
//Have some parameters that you can change around
var cellSize = 10;
var cellsWide = 100;
var cellsHigh = 100;
//Instantiate and initialize a 2d array to false
var theGrid = new Array();
for (var i=0; i<cellsWide; i++) {
theGrid.push(new Array());
for (var j=0; j<cellsHeight; j++) {
theGrid[i].push(false);
}
}
//Attach a click event to your canvas (assuming canvas has already been dropped on page
//at the assigned width/height
$('#simCanvas').click(function(e) {
var i = Math.floor((e.pageX - this.offsetLeft)/cellSize);
var j = Math.floor((e.pageY - this.offsetTop)/cellSize);
theGrid[i][j] = !theGrid[i][j];
});
这将是一种更简洁的方式来处理问题空间。问题空间到世界空间的映射更为直接,但如果您需要帮助,请告诉我。
干杯
答案 2 :(得分:0)
首先,检查MoarCodePlz的答案。关于你的代码:
按下开始时 Uncaught exception: ReferenceError: Undefined variable: gameLoop
。
您在initialize
中定义的所有函数都不在全局范围内,因此无法在全局范围内访问它们。
请使用Firebug; Chrome开发者工具,Opera Dragonfly或其他东西可以找出这样的错误。这些工具在开发JS时非常有用。