2014-01-11 2 views
0

정확한 코드를 표시 할 수 있지만 (여기까지는 내가 달성하려고하는 것이 있습니다.) 어디에서부터 시작해야할지 모르겠습니다.하나의 객체에서 X 객체 양 사이의 변수 변경 추적

오브젝트를 X 개 가지고있어 Obj5s와 Obj10s 중 두 가지가 있다고 가정합니다. 대상도 있습니다.

대상에는 단일 속성 인 Health = 100 및 Obj 형식 개체를 저장하는 배열이 있습니다. 그러나 마지막 하나는 중요하지 않습니다 (제 생각 엔).

이제 Obj5s와 Obj10s 모두 대상 건강을 감소시킵니다 (단, 대상 건강에 동시에 영향을주는 임의의 양의 개체가있을 수 있음).

Obj5s가 5 초 동안 20 초 감소합니다. Obj10s가 10 초 동안 10 줄입니다.

두 개체가 동시에 대상에 추가되므로 대상 상태는 다음과 같아야합니다. 100 - 20 - 10 = 70 5 초 동안 지속되어야합니다.

5 초 후 상태가 업데이트됩니다. Obj5s가 제거되고 100으로 돌아갑니다. Obj10s는이 정보를 받고 다음과 같이 보입니다. 100 - 10 = 90; 5 초 동안. 그 뒤로 100

클래스가 될 것이다 후 는

class Target 
{ 

    float Health; 
    Array<Obj*> AffectingObjs; 
} 

class Obj 
{ 
    float Damage; 
    float Duration; 
} 

class Obj5s : Obj /it sets values 
{ 
    Damage = 20; 
    Duration = 5; 
} 

코드가 실제로 게임 루프에서 실행되는 pesudocode에게 있습니다.

이제 내 질문은 어떻게 Obj5s 및 Obj10s 및 다른 ObjX 건강 변경 사항을 인식 할 수 있습니까?

Obj로 변경 될 때마다 상태 값을 푸시해야하며 이에 따라 업데이트해야합니까? 또는 두 objs 항상 변경되었는지 확인하기 위해 값을 쿼리해야합니까?

나는 마지막 접근 방식의 초기 구현을 가졌지 만 예상했던대로 실제로 작동하지는 못했습니다. 각 쿼리 이후에 값이 업데이트되어 다음과 같은 동작을하기 때문에 : 100 - 10 = 90; 90-10 = 80; 80-10 = 70; 등 요점은 각 Obj에 한 번 값을 설정하고 다른 Obj가 수정할 때만 변경해야한다는 것입니다.

올바른 해결 방법을 찾기 시작하는 위치에 올바른 방향을 가리키는 것이 있으면 감사하겠습니다!

답변

1

코드를 제공하지 않으므로 의사 코드로 질문에 답변 해 드리겠습니다.

  1. getter/setter 기능을 통해 건강에 액세스 할 수 있도록 설정합니다.
  2. setHealth (newVal)가 호출 될 때마다 대상의 상태가 수정되었음을 알리기 위해 모든 AffectingObjs를 호출합니다. 당신이 즉각적인 변화를 일으키는 개체를 호출하지 않으려면 다음 setHealth로의 변화를 만드는 개체를 전달하고 setHealth는 전달 된 객체없는 AffectingObjs에서 해당 개체를 호출 할 수 있습니다.

P.S.을 나는 왜 당신이 당신의 설명에 기초한 변화에 대해 당신의 영향을받는 객체에게 알리 길 원하는지 모르겠습니다.그들이 건강에 영향을 미치고 건강을 되찾았을 때 건강을 공제해야한다고 생각됩니다.

+0

감사합니다. 실제로 그것은 그렇게 작동하지만, 정확하지 않습니다. 그 중 두 개가 동시에 적용되지만 지속 시간이 다른 경우 더 오래 지속되는 정보는 더 이상 사실이 아닌 정보를 사용합니다 (Health는 더 이상 원래 값에서 -20으로 수정되지 않습니다. 더 이상 존재하지 않음), 두 번째 객체는이를 인식하지 못하고 생성되는 동안 획득 한 값을 계속 사용합니다. –

+0

팁을 주셔서 감사합니다. 지금 비트 패치 작업이지만 지금 당장 작동합니다. –

관련 문제