2014-04-10 1 views
0

안녕하세요.동일한 클래스를 공유하는 각 객체에 다른 변수에 영향을 미치지 않는 개별 변수

이것은 게임과 관련된 질문입니다.

동일한 클래스에 3 개의 개체 (세 고블린) 데이터가 입력되는 문제가 있습니다.

이 세 객체는 배열에 있고 해당 클래스에 데이터가 입력되고 배열로 초기화됩니다.

private var goblin1:Goblin = new Goblin(); 
    private var goblin2:Goblin = new Goblin(); 
    private var goblin3:Goblin = new Goblin(); 

그래서 위의 변수는 배열에 배치되었습니다.

private var aGoblinArray = new Array(container.goblin1, container.goblin2, container.goblin3); 

개체를 배열에 배치 한 후 모든 고블린을 반복했습니다.

for (var i:int = 0; i < aGoblinArray.length; i++) 
    { 
     var goblin:Goblin = aGoblinArray[i]; 
    } 

는 지금은 for 루프에서 그러나 hitTest이 있고 그러나 hitTest은 다음과 같습니다

이 플레이어는 고블린의 안타 경우 의미
   if (goblin.hitTestPoint(_character.x + 100, _character.y - 45, true)) 
       { 
        goblinCanMove = false; 
        trace("lance hits"); 
        //hitOnce 
        if (!hitOnce) 
        { 
         hitOnce = true; 
         trace("take on damage"); 
        } 
        goblin.moveBack(); 
        goblin.minusHealth(); 
       } 

, 그들은이 기능을 할 것입니다.

고블린 반에서 어떻게 생겼습니까? 내가 goblin1을 치면

public static var goblinLife; int; 

    goblinLife = 2;//put in main constructor 

    public function minusHealth():void 
    { 
     goblinLife --; 
     checkDeath(); 
    } 

    private function checkDeath():void 
    { 
     if (goblinLife == 0) 
     { 
      parent.removeChild(this); 
     } 
    } 

문제는, 다음 goblinLife는 것 = 1.이 모든 othet 고블린 의미 (goblin2를 3) 한 생활을해야합니다. 그들은 같은 수업을 공유하기 때문에.

goblin1이 죽으면 그는 제거되고 var goblinLife는 0이됩니다. 이제 다시 2로 재설정 할 수 있지만 문제의 절반이 수정됩니다.

내 질문은 각 고블린에게 자신의 개인 생명 시스템이 있는지 확인하는 방법이 있는지입니다. 미리 감사드립니다.

+1

왜 goblinLife를 정적 변수로 설정합니까? – Pan

+0

메모리가 필요하다면 개인 var로 변경합니다. 죄송합니다 팬 – Moynul

+0

@Pan이 이미이 문제를 다루었지만'goblinLife'가 정적 인 사실이 문제의 원인입니다. static 키워드를 삭제하십시오. – Marty

답변

1

대단히 감사합니다. 팬과 마티!

정적이란 모든 클래스와 함수에서 변경할 수 있음을 의미합니다.

개인은 개인 고블린마다 보호된다는 의미입니다.

public static var goblinLife; int; 

을 변경

private var goblinLife; int; 

에 각 개별 고블린이 같은 클래스의 다른 클래스 나 개체를 변경할 수 없음을, 자신의 변수가된다는 것을 의미합니다.

팬과 마틴 감사합니다. 나는 AS3 101: Quick Tip – When to Use Static Properties and Methods과 다른 코딩 책을 읽을 필요가 있다고 생각한다.

+1

이것은 거의 정확합니다.변수를 static 변수없이'public' 변수로, 정적 변수로'private' 변수를 가질 수 있습니다. 말하자면'static'은 * class *에 속성을 붙이는 반면 static은 부족하면 그 속성을 클래스의 * instance *에 붙일 것입니다. – Marty

+0

@ Marty 네, 고마워요. :) 지금은 정적이 클래스와 클래스를 공유하는 인스턴스에 대해 말합니다. – Moynul

관련 문제