オブジェクト内のクラスのインスタンスを持つ配列のハードコピー

ヤクブMenšík:

私は複数のレベルで簡単なゲームを作成しています。各レベルは、キーと値のペアのオブジェクトによって表されます。各レベルの内部でレベル内にロードされるクラスの新しいインスタンスを配列でもあります。これまでのところ、それは罰金を働いたが、私が実装された場合、私はすでにそれらを変更したため、再起動ボタンプログラムは再びthooseインスタンスをロードすることはできません。私はレベルにインスタンスthooseハードコピーする必要があり、再起動ボタンを押すと、あなただけのハード再びそれらをコピーすることができますので。

これは私のレベルのオブジェクトの一例です。

const level4 ={
 width:window.innerWidth,
 height:window.innerHeight,
 gates:[new Gate(canvas.width-20, 100,0,-2), new Gate(200, 15,4,-1)],
 blocks:[new Block(50,100,0, 0, 50, 1, 2), new Block(200,200,0, 0, 50, 1, 1)],
 difficulty:'easy',
 id:4
};

私はすでに、この解析機能を備えたハードコピー対象にしようとしたが、それは仕事をdoesntの。

const parseLevel = (currentLevel) =>{
  return {
    width: currentLevel.width,
    height: currentLevel.height,
    gates: parseObjects(currentLevel.gates),
    blocks: parseObjects(currentLevel.blocks),
    difficulty: currentLevel.difficulty,
    id: currentLevel.id
  };
};

const parseObjects = (array) =>{
  let newArray = [];
  for(let i of array){
  let newObj = Object.assign( Object.create( Object.getPrototypeOf(i)),i);
  newArray.push(newObj);
  }
return newArray;
};

そして、私の関数の中で私は、レベルIコールをロードしています場所:

 level = parseLevel(level4);
厳しいです:

私は簡単な解決策は、あなたを変換することだと思いlevel4関数に定数から。そうすれば、あなたは複数回それを呼び出すと、常に新鮮なインスタンスを得ることができます。

const level4 = () => ({
  width: window.innerWidth,
  height: window.innerHeight,
  gates:[
    new Gate(canvas.width-20, 100,0,-2), 
    new Gate(200, 15,4,-1)
  ],
  blocks:[
    new Block(50,100,0, 0, 50, 1, 2), 
    new Block(200,200,0, 0, 50, 1, 1)
  ],
  difficulty: 'easy',
  id: 4
});

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=30566&siteId=1