Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 在as3中在二维数组中移动对象?_Actionscript 3_Flash_Multidimensional Array - Fatal编程技术网

Actionscript 3 在as3中在二维数组中移动对象?

Actionscript 3 在as3中在二维数组中移动对象?,actionscript-3,flash,multidimensional-array,Actionscript 3,Flash,Multidimensional Array,我正在尝试为as3中的cs类创建2048的克隆,但在移动块时遇到了问题。我基本上声明了一个4x4阵列: var tiles:Array = new Array(new Array(4), new Array(4), new Array(4), new Array(4)); 我在开始时将其全部设置为空字符串: for(i = 0; i < 4; i++){ for(j = 0; j < 4; j++){ tiles[i][j] = ''; } } 我

我正在尝试为as3中的cs类创建2048的克隆,但在移动块时遇到了问题。我基本上声明了一个4x4阵列:

var tiles:Array = new Array(new Array(4), new Array(4), new Array(4), new Array(4));
我在开始时将其全部设置为空字符串:

for(i = 0; i < 4; i++){
    for(j = 0; j < 4; j++){
        tiles[i][j] = '';
    }
}
我还有一个显示功能,以便在框架上显示阵列:

function display():void{
    for(i = 0; i < 4; i++){
        for(j = 0; j < 4; j++){
            if(tiles[i][j] != ''){
                tiles[i][j].x = 50 + (107 * j)
                tiles[i][j].y = 50 + (107 * i)
            }
        }
    }
}
我还有一个向下键事件来移动瓷砖:

for(i = 0; i < 4; i++){
    for(j = 0; j < 4; j++){
        if(tiles[i][j] != ''){
            switch (event.keyCode){
                case Keyboard.LEFT:
                    tiles[i][0] = tiles[i][j]
                    break;
                case Keyboard.RIGHT:
                    tiles[i][3] = tiles[i][j]
                    break;
                case Keyboard.UP:
                    tiles[0][j] = tiles[i][j]
                    break;
                case Keyboard.DOWN:
                    tiles[3][j] = tiles[i][j]
                    break;
            }
            tiles[i][j] = ''
        }
    }
}

它应该将新磁贴设置为与旧磁贴等效的磁贴,然后将旧磁贴设置为,但由于某些原因,它将新磁贴和旧磁贴都设置为!我不确定这里发生了什么,有人能给我指出正确的方向吗?

在代码中,您在哪里设置的值与空字符串不同?@null当然在movement函数之外。2048每次移动都会产生新的非空平铺。您的移动迭代错误。您需要将所有磁贴移动到某一侧,所以您应该从该一侧迭代-如果向上,您应该从0到3迭代Y,前提是3小于0,如果向下,您应该从3到0迭代Y,否则您将在过程中丢失磁贴。此外,您还应该跳过空平铺,也就是说,如果您在1,0处有2个平铺,在1,3处有4个平铺,并进行向上移动,那么您的4应该在1,1处结束。你必须将相等的瓷砖合并成一个更大的瓷砖,所有这些都应该在一个移动例程中处理。因为这个例程超过了你项目的一半,你应该自己做。在这段代码中,除了完全错误的移动处理之外,您的第二个错误是在每个磁贴上处理磁贴[i][j]=而不是仅在移动的磁贴上处理磁贴,从而导致板被清除。