2013-05-26 2 views
0

저는 Bomberman을 게임처럼 화합시키고 동시에 C#을 배우려고합니다.bool 변수가 단일체로 바뀌지 않습니다. 3d

내 코드에서 targetDestroyed1의 VAR의 부울 값을 변경하려고하지만 문제가있는 것 같습니다 ..

문제 : 객체가 설립 된 GetNearestTaggedObject1에 는 targetDestroyed1 사실이된다.

private bool targetDestroyed1; 

    void Start(){ 
OriginXplosion = new Vector3(transform.position.x, transform.position.y, transform.position.z); 
InstantiateFire(); 
} 

void Update(){ 
if (target1 != null) { 
     Destroy (target1); 
    } 

public void InstantiateFire(){ 
    FireRate = player_actions.FireRate; 
    FireRate -= 1; 
    targetDestroyed1 = false; 

    for(int i1= 0; i1 <= FireRate; i1++){ 
      float i1_axeZ= transform.position.z + i1; 
     if(i1_axeZ <= 7) 
     { 
      if (!targetDestroyed1) 
      { 
       Instantiate (ParticulesFeu, Axe1[i1].transform.position, ParticulesFeu.transform.rotation); 
       ScanForTarget1(); 
      } 
     } 
} 
Destroy (gameObject); 
} 

void ScanForTarget1(){ 
    target1 = GetNearestTaggedObject1(); 
} 


GameObject GetNearestTaggedObject1(){ 

    float nearestDistanceSqr= 0.2f; 
    GameObject[] taggedGameObjects= GameObject.FindGameObjectsWithTag(searchTag); 

    foreach(GameObject obj in taggedGameObjects) { 

     Vector3 objectPos= obj.transform.position; 
     float distanceSqr= (objectPos - transform.position).sqrMagnitude; 

     if (distanceSqr < nearestDistanceSqr) { 
      target1 = obj; 
      targetDestroyed1 = true; 
      nearestDistanceSqr = distanceSqr; 
     } 
    } 

    return target1; 
} 

} 

여러분의 도움에 감사드립니다 :하지만 InstantiateFire()의 경우 (! targetDestroyed1) 상태에서 targetDestroyed1는 항상 false를 유지하고 인스턴스화 여기

정지

대신 계속하는 것은 내 코드입니다! 당신의 InstantiateFire 방법에

+0

'targetDestroyed1'을 (를) 사용하는 것이 좋습니다. 'if (distanceSqr Ergwun

답변

1

봐 : 당신은 명시 적으로 세 번째 줄에 falsetargetDestroyed1을 설정하는

public void InstantiateFire(){ 
    FireRate = player_actions.FireRate; 
    FireRate -= 1; 
    targetDestroyed1 = false; 

    ... 

. 따라서 루프의 첫 번째 반복에서는 항상 false가됩니다. 즉, i1_axeZ 및 기타 변수의 값에 따라 일 수 있습니다.InstantiateScanForTarget1을 호출합니다. 변수 GetNearestTaggedObject1 세트 인 경우

, 그것은 정말 InstantiateFire에서 루프의 다음 반복 true로 설정 유지됩니다 -하지만 당신은 어떤 영향을 미쳤다 전에 다시 if 블록에 들어갈 필요 했어. 디버거를 단계별로 실행하거나 로깅을 추가하여 어떤 일이 일어나는지 확인해야합니다. 근본적으로, 당신의 코드는 그 순간 꽤 혼란 스럽습니다. 아무것도, 난 강력하게 그 유형의 목록을 만들 ... 모두 대상을 캡슐화하는 적절한 클래스를 만들 수 조언이 파괴 여부 또는하지 않는 게 좋을에서 제외

:

private readonly List<Target> targets = new List<Target>(); 

을 그 8 개의 별도 변수를 가질 필요가 없으며 각 변수를 다른 코드로 조작 할 수 있습니다.

+0

괜찮다고 생각합니다. 그의 문제는'for' 루프의 어떤 시점에서 ('ScanForTarget1()'>'GetNearestTaggedObject1()' – Ergwun

+0

네,하지만이 변수를 시작 부분에 설정하면 (') 또는 선언문에 private bool targetDestroyed1 = false; 같은 문제가 있습니다. – Malakiof

+0

@Malakiof : 당신이 의미하는 것이 명확하지 않습니다. 코드가 매우 혼란 스럽습니다. 솔직히 말해서 들여 쓰기가 도움이되지 않습니다. –

관련 문제