ヤクブ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
});