Actionscript 3 在as3中在二维数组中移动对象?
我正在尝试为as3中的cs类创建2048的克隆,但在移动块时遇到了问题。我基本上声明了一个4x4阵列: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] = ''; } } 我
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]=而不是仅在移动的磁贴上处理磁贴,从而导致板被清除。