여기 내 사용 사례입니다 : 사용자가 버튼을 쳤을 때참조 된 변수를 null로 설정하는 방법은 무엇입니까?
Phaser.io에가, 내가 로컬 let newSquare
변수에 Phaser.sprite를 설정하고, 나는 Phaser.sprite의 Squares
배열에 .push()
.
나중에 destroy
함수를 호출하여 newSquare
변수에 함수를 호출 한 다음 null로 설정합니다. 스프라이트가 .destroy()
뒤에 화면에서 잘 지워지는 동안 내 Squares
배열에서 여전히 액세스 할 수 있습니다 ...
newSquare
변수를 null로 설정하면 개체가 될 것이라고 생각했습니다. 다른 모든 참조들에 대해서도 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));
}
를 놓친 거지? 감사합니다.
아니요. 같은 "것"에 대한 여러 참조를 가질 수 있습니다. 이러한 참조 중 하나를 null로 설정해도 다른 참조가 무효화되지는 않습니다. 그러나'.destroy() '를 호출하면 그것들이 무효화됩니다. 당신은 명시 적으로 객체를 파괴 했으므로, 다른 참조를 사용하는 다른 객체가 현재 파괴 된 객체에 "포인터"를 사용하려고합니다. 그것은 당신의 집 주변에 "침대 밑의 서랍에 양말"이라고 말하는 3 개의 노트가있는 것과 같을 것입니다. postits 중 하나를 태우면 여전히 서랍에 양말이 있습니다. 그러나 당신이 서랍을 태우면 그 노트는 거기에 양말이 있다고 말할 것입니다. –
@MarcB Phaser에서'.destroy'가 정확히 무엇을하는지는 모르겠지만 양말 서랍을 닫고 잠그는 것이 더 나은 비유라고 상상해보십시오.그래서 아직 거기에 있습니다, 모든 징후는 여전히 그것을 가리키고, 아마 여전히 양말이 있지만 당신은 그들에게 갈 수 없습니다. – vlaz