は私のユースケースである:参照する変数をnullに設定するにはどうすればよいですか?ここ
Phaser.ioにユーザーがボタンを押したときに、私は地元のlet newSquare
変数にPhaser.spriteを設定し、私はPhaser.spriteのSquares
配列にそれを.push()
。
後で、私はそのnewSquare
変数にdestroy
関数を呼び出して、それをnullに設定します。スプライトはよく.destroy()
後に画面から削除されている間、私はまだ私のSquares
配列からそれにアクセスすることができます...
私はnullにnewSquare
変数を設定している場合、オブジェクトであることは、それが設定されるだろう、と思いました他のすべての参照についてもnullにする必要はありますか?
なぜSquares
の配列のリファレンスがnullに設定されていないのですか?
抜粋:
eventFunction (e, i) {
let newSquare = Game.add.sprite(Lines.attack.a, 0, 'square');
// Some other methods call here
Squares[ e.target.dataset.line ].push(newSquare);
setTimeout(() => {
if (newSquare) {
newSquare.destroy();
newSquare = null;
console.log(Squares); // will print an array with an iteration corresponding to newSquare object, when I want it to be set to null, in order to clean the array with a _.pull()
}
}, (2 * 1000));
}
は、私がここで何をしないのですか?ありがとうございます。
実際にはありません。あなたは同じ "もの"への複数の参照を持つことができます。これらの参照の1つをnullに設定しても、他の参照は無効になりません。しかし、 '.destroy()'を呼び出すと無効になります。オブジェクトを明示的に破棄しました。つまり、他の参照を使用しているものは、破棄されたオブジェクトに「ポインタ」を使用しようとしています。それはあなたの家の周りに3つのメモを "ベッドの下に引出しの靴下"と言うようなものです。あなたがポストのいずれかを焼くなら、あなたは引き出しに靴下を持っています。あなたが引き出しを燃やすと、それらの紙幣はまだそこに靴下があると言います。 –
@MarcB Phaserでは '.destroy'が正確に何をするのか分かりませんが、私は靴下の引き出しを閉じてロックするというより良いアナロジーを想像しています。だからまだそこにあり、すべての標識がまだそれを指していて、おそらくまだ靴下がありますが、あなたはそれらに行くことはできません。 – vlaz