2012-03-21 8 views
0

JSONオブジェクトを使用するのがかなり新しいです。私はちょっと固まっています。半複合JSONオブジェクトに値を追加するにはどうすればよいですか?

Array 
(
    [status] => success 
    [id] => 1 
    [name] => Zone 1 
    [description] => Awesome zone deze.. 
    [tiles] => Array 
    (
     // Column for the tile grid 
     [0] => Array 
      (
       // Row for the tile grid 
       [0] => Array 
        (
         [tileID] => 1 
         [rotation] => 0 
        ) 
       [1] => Array 
        (
         [tileID] => 1 
         [rotation] => 0 
        ) 
       // Etc.. 
      ) 
     [1] => Array // etc.. etc.. 
    ) 
) 

私はHTML5のCanvasゲームのアイソメグリッドをレンダリングするためにこのオブジェクトを使用します。

私はこの配列から変換されたJSONオブジェクトを持っています。私はマップエディタを構築しており、マップにタイルを追加するために、このjsonオブジェクトに値を追加する必要があります。

これは、私はPHPでそれを行うだろうかです:

mapData[column][row] = array(
    'tileID' => 1, 
    'rotation' => 0 
); 

だから私の質問は、どのように私はJavaScriptでJSONオブジェクトでこれを実現するか、でしょうか?

ありがとうございます!

ニック

私はエラーに遭遇しました

更新:

can't convert undefined to object 
mapDataTiles[mouseY][mouseX] = { tileID: editorSelectedTile, rotation: 0 }; 

これは、私は、JSONオブジェクトに新しいタイルを保存&をクリックするために使用するコードです。最初は私の私のパラメータの1つは、「未定義」だったのに、私はコンソールにそれらを記録したが、彼らは完全に出てきた。..

// If there is already a tile placed on these coordinates 
if(mapDataTiles[mouseX] && mapDataTiles[mouseX][mouseY]) 
{ 
    mapDataTiles[mouseX][mouseY]['tileID'] = editorSelectedTile; 
} 
// If there is no tile placed on these coordinates 
else 
{ 
    mapDataTiles[mouseX][mouseY] = { tileID: editorSelectedTile, rotation: 0 }; 
} 

私の変数は次の値があります。

また
MouseX: 5 
MouseY: 17 
tileID: 2 

をそれは実際には動作し、新しいデータを配列に保存するといういくつかの座標について、奇妙な事実です。

UPDATE裁判やコーディングエラーの数時間後に2

私は解決策を作ってみました!

とにかく誰も助けてくれてありがとう!

好奇心が強い人は、自分のコードを表示しても大丈夫です。これまでのところ、無制限のタイルのために世界地図をどんな方向にも拡張する能力があります。 :D

cya

答えて

0

まあまあ同じです。既存の行に列を追加したい場合は

mapData.tiles.push([ 
{ 
    'tileID': 1, 
    'rotation': 0 
}, 
{ 
    'tileID': 3, 
    'rotation': 0 
}]); 

::JavaScriptオブジェクトは、alterateする:)

jsonObject.tiles[column][row] = {tileID: 1, rotation: 0}; 
+0

私はそれを試みましたが、私は奇妙なエラーを取得しています、上記を参照してください。とても早く回答してくれてありがとう! –

+1

列または行の配列が実際に存在することを確認する必要があります。これらは動的に作成されません。配列の存在を確認するために "else"節を変更し、配列が存在しない場合は、与えられた列/行に配列を作成する必要があります。 – Saebekassebil

0

をあなたが行を追加したい場合は、最も簡単なものの一つです

mapData.tiles[row].push({ 
    'tileID': 1, 
    'rotation': 0 
}); 
+0

しかし、もし私がそれを好きなら、私はもはや「列」を支配することができず、それは不可欠です。右? –

+0

それは行と列を作成する方法です。 それらにアクセスするには、Saebekassebilの方法を使用してください。 –

+0

あなたは私が何を意味するか分かりません。 "mapData.tiles [row] .push(.."私はそれが不可欠である[col]キーを制御できません。もし私がそれを好きなら、それはちょうど1つの列を追加し、 mapData [row] = new Array(); mapData [row] [col] = {tileID:1}このようにして、 –

関連する問題