【问题标题】:Maximum call stack size exceeded in javascript canvasjavascript canvas 中超出了最大调用堆栈大小
【发布时间】:2014-01-07 19:58:26
【问题描述】:

所以我在画布中制作了一个网格游戏,如果选择了一个方块,它周围的相同颜色的方块也会被选中,当点击方块时,选定的方块会爆裂,新的方块会掉下来。

我制作的网格是 9 行 15 列 -

tile_array = [[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null]];

我正在用随机颜色的瓷砖填充网格。 这是我的悬停功能 -

function over_tile(our_tile) {//, pointer
    our_tile.alpha = 0.5;
    if (our_tile.tile_row > 0) { // top row availiable
        top_tile = this.tile_array[our_tile.tile_row-1][our_tile.tile_column];
        if (top_tile.tile_color == our_tile.tile_color) {
            this.over_tile(top_tile);
        };
    };
    if (our_tile.tile_column < 14) { // right column availiable
        right_tile = this.tile_array[our_tile.tile_row][our_tile.tile_column+1];
        if (right_tile.tile_color == our_tile.tile_color) {
            this.over_tile(right_tile);
        };
    };
    if (our_tile.tile_column > 0) { // left column availiable
        left_tile = this.tile_array[our_tile.tile_row][our_tile.tile_column-1];
        if (left_tile.tile_color == our_tile.tile_color) {
            this.over_tile(left_tile);
        };
    };
    if (our_tile.tile_row < 8) { // bottom row availiable
        bottom_tile = this.tile_array[our_tile.tile_row+1][our_tile.tile_column];
        if (bottom_tile.tile_color == our_tile.tile_color) {
            this.over_tile(bottom_tile);
        };
    };
}

现在我面临的问题是上面创建了一个调用堆栈大小超出错误。 但是在函数中,如果我注释掉部分并尝试一些变化是有效的 -

  1. 左列底行
  2. 左列顶行
  3. 右列,底行
  4. 右列,顶行

这些都在制造错误 -

  1. 左栏,右栏
  2. 顶行,底行

并且任何三个或所有组合都不能一起工作,并且每个组合都在单独工作。我似乎无法找出问题所在。

【问题讨论】:

    标签: javascript html canvas


    【解决方案1】:

    让矩阵是这样的:

    1 2 3
    4 5 6
    7 8 9
    

    当你在bottom+left on时,例如,5,调用正在扩展,所以:

    5->4->7->fin
    
    5->8->7->fin
    

    在其他工作案例中也是如此。

    在bottom+top的情况下,在5上,你会得到:

    5->2->5 (lower than 2)->2 (higher than 5)->5->2->...
    

    在其他不起作用的情况下也是如此。

    尝试标记访问过的图块,这样您就再也不会访问它们了。

    【讨论】:

    • 我刚刚进行了 alpha 检查,它起作用了。再次感谢
    猜你喜欢
    • 1970-01-01
    • 2013-08-23
    • 2019-05-21
    • 1970-01-01
    • 2016-09-26
    • 1970-01-01
    • 2012-06-26
    • 2017-07-02
    • 2021-09-07
    相关资源
    最近更新 更多