我将尝试仅添加相关代码,但以防万一需要的完整页面在这里,并随时在github上查看。
我正在使用画布/javascript及其一部分构建俄罗斯方块游戏
//drop the falling piece by one space
function dropByOne(){
//loop through the four squares that make up the piece
for ( i = 3; i > -1; i-- ) {
//empty old spot of piece
board[ fallingPiecePos[i].y ][ fallingPiecePos[i].x ] = 0;
//drop position place-holder by one row
fallingPiecePos[i].y++;
//add square to new spot
board[ fallingPiecePos[i].y ][ fallingPiecePos[i].x ] = fallingPiece;
}
}
board
是 20*10 array
,fallingPiecePos
是具有数值x
和y
值的对象数组,即[{y:0,x:4},{y:0,x:5},{y:0,x:6},{y:0,x:7}]
(线段)或(正方形),使用以下代码[{y:0,x:4},{y:0,x:5},{y:1,x:4},{y:1,x:5}]
呈现:board
for ( i = 0; i < 4; i++ ) {
board[ fallingPiecePos[i].y ][ fallingPiecePos[i].x ] = fallingPiece;
}
fallingPiece
是一个随机分配的数字 (1-7),用于canvas
将作品渲染为正确的颜色。
希望这足够清楚,现在的问题是,只要fallingPiece
有一个价值,它在我得到之前就已经拥有
TypeError: board[fallingPiecePos[i].y] is undefined
[Break On This Error]
board[ fallingPiecePos[i].y ][ fallingPiecePos[i].x ] = fallingPiece;
(board[ fallingPiecePos[i].y ][ fallingPiecePos[i].x ] = fallingPiece;
是上面代码块的最后一行)
我有一个功能nothingIsBelow()
可以检查这件作品是否已经到达底部,所以我很难理解为什么会这样。
编辑
在前 3-4 件(除了件碰撞保护之外)工作正常之前,我在这一点上还不够清楚,并且仅在具有先前保持的值时才给我上述错误fallingPiece
编辑
似乎问题是这样的我有一个数组shapes
var shapes = [
[{y:0,x:4},{y:0,x:5},{y:0,x:6},{y:0,x:7}],
[{y:0,x:4},{y:0,x:5},{y:0,x:6},{y:1,x:4}],
[{y:0,x:4},{y:0,x:5},{y:0,x:6},{y:1,x:5}],
[{y:0,x:4},{y:0,x:5},{y:0,x:6},{y:1,x:6}],
[{y:0,x:4},{y:0,x:5},{y:1,x:4},{y:1,x:5}],
[{y:0,x:4},{y:0,x:5},{y:1,x:3},{y:1,x:4}],
[{y:0,x:4},{y:0,x:5},{y:1,x:5},{y:1,x:6}]
];
我有一行代码将形状分配给新作品
fallingPiecePos = shapes[fallingPiece - 1];
似乎当我稍后引用fallingPiecePos
并更改值(fallingPiecePos[i].y++;
)时,它也会更改shapes
值
简单来说,下面的代码
var myArray = [
[{a:0,b:1},{a:1,b:1}],
[{a:0,b:0},{a:1,b:0}]
];
var foo = myArray[0];
foo[0].a++;
console.log(myArray[0][0][a]);
会给我1
,因为不仅foo
而且myArray
更新了,所以我怎样才能创建一个变量来保存一个新数组(foo
)保存的值myArray[0]
并且可以在不更新的情况下更新myArray[0]
。