제목은 최고 수 있지만, 여기에 내가 지금까지 작성한 코드입니다하지 않을 수 있습니다개체 상태에서만 존재하는 변수를 만드는 방법은 무엇입니까? 질문의
var menuState = {
//state variables
menuBttn: {
x: _canvas.width/2,
y:_canvas.height/2,
img: imageArray[2],
over: false,
click: function() {
changeState(2);
}
},
preload: function() {
},
update: function(){
surface.clearRect(0, 0, _canvas.width, _canvas.height);
for (var i = 0; i < menuAssets; i++){
surface.drawImage(//draw menuBttn);
}
},
exit: function(){
},
};
내가하고 싶은 본질적으로 menuButtn (어떤 객체이다)라는 변수를 생성하는 menuState 내에 만 존재합니다.
은 내가 수행하여이 작업을 수행 할 수 있다고 생각 :
var menuState = {
//state variables
this.menuBttn = {
x: _canvas.width/2,
y:_canvas.height/2,
img: imageArray[2],
over: false,
click: function(){
changeState(2);
}
},
}
이 그것을 Phaser.io (게임을 만들기위한 라이브러리)에서 작동하는 방법입니다,하지만 난 내 자신의 게임 엔진을 만들기 위해 노력하고있어 .
어떻게 해결할 수 있습니까?
필자는 * phaser *에 대해 모르지만 표준 객체 리터럴에서는 'this.menuBttn'을 사용하여 속성 이름을 정의 할 수 없습니다. 나는 당신이 * this *가 리터럴을 할당하는 객체라고 기대하고 있다고 생각합니다. 이것은 틀린 것입니다. * this *는 실행 컨텍스트의 매개 변수이며 전역 코드에서는 전역 개체입니다. 어휘 적으로가 아니라 함수가 호출되는 방식 (또는 * bind *)에 따라 런타임시 설정됩니다 (화살표 함수는 제외하지만 여기서는 관련이 없습니다). – RobG
@RobG 나는 힌트를 얻었습니다. 그런데 옵션이 없기 때문에 그 객체/상태의 다른 속성 사이에서 공유 될 수있는 하나의 객체/상태 *의 범위 안에 만 존재하는 변수를 선언 할 수있는 방법이 있습니까? – PixelProgrammer
@ RobG, 잠깐, 당신이 'obj = {this.subobjc = {...}}'할 수 없다고 말하는거야? 100 % 유효하고 정확히 해당 컨텍스트에만 관련이있는 개체를 정의한다고 가정했기 때문입니다. 이 경우'menuState'는 전역 적으로 사용할 수 있지만'menuBttn'는 전역 적으로 사용할 수 없습니다. – frei