私はマッチ3のゲームをしようとしています。オブジェクトlevel
はtiles
の2d配列のプロパティを持っています。私はいくつかの操作が、私はこのシンプルなラインを使用して-1
に特定の要素の種類を変更したいん(私はfor
を使用することがありますが、今のところ、私は実証の目的のために、それは簡単で行った)後arr [1] [0]を変更することで、複数のセルが変更されます
level.tiles[1][0].type = -1;
は、ここでは、コード
var level = {
x: 250, // X position
y: 113, // Y position
columns: 8, // Number of tile columns
rows: 8, // Number of tile rows
tilewidth: 40, // Visual width of a tile
tileheight: 40, // Visual height of a tile
tiles: [], // The two-dimensional tile array
selectedtile: {selected: false, column: 0, row: 0}
};
var tileTypes = [
{
type: "red",
colors: [255, 128, 128]
},
{
type: "green",
colors: [128, 255, 128]
},
{
type: "darkBlue",
colors: [128, 128, 255]
},
{
type: "yellow",
colors: [255, 255, 128]
}
];
function createLevel() {
for (var i = 0; i < level.columns; i++) {
level.tiles[i] = [];
}
for (var i = 0; i < level.columns; i++) {
for (var j = 0; j < level.rows; j++) {
level.tiles[i][j] = getRandomTile();
}
}
}
function getRandomTile() {
return tileTypes[Math.floor(Math.random() * tileTypes.length)];
}
createLevel();
level.tiles[1][0].type = -1;
残念なことにのみtiles[1][0]
が変更されていない
これは、オブジェクトが参照を使用してコピーされているためです。ですから、あなたが 'var x = typeTiles [0]; var y = tileTypes [0] 'は、両方とも同じオブジェクトへの参照を保持します。 1つの変更は両方とも変更されます – Rajesh
@Rajesh Typo:オブジェクトは**コピーされていません**リンクされています。 –
@ÁlvaroGonzálezそれを指摘してくれてありがとう。 – Rajesh