2016-02-05 2 views
1

Я использую код SetDownState(), потому что мне нужно, чтобы игрок одновременно нажимал две кнопки одновременно. Проблема в том, что в любое время button составляет SetDownState == true, он продолжает обновляться.Как остановить обновление SetDownState() при выполнении условия

enter image description here

Что происходит, пока нажата кнопка Сценарии ниже будет работать. Но кнопка все еще работает. Таким образом, если условия меняются, это заканчивается тем, что игрок проигрывает, даже если они выиграли.

Это «Кнопка» Сценарий (получил это от образца активов):

namespace UnityStandardAssets.CrossPlatformInput 

{ 
    public class YayButtonTouch : MonoBehaviour 
    { 

     public bool yayButtonTouch = false; 

     public string Name; 

     public void SetDownState() 
     { 

      yayButtonTouch = true; 
     } 


     public void SetUpState() 
     { 
      yayButtonTouch = false; 
     } 
    } 
} 

Вот как работает код. В зависимости от состояния он меняет то, что делают кнопки. После того, как условие выполняется он запускает WinningScript() или Losing Script()

Вы не можете видеть его здесь, но условие Win изменит CrowdTypes

void Update() 
{ 

    if (cm.crowdOptions == CrowdManager.CrowdTypes.None) { 

     if (yt.yayButtonTouch == true) 
     { 
      if (bt.booButtonTouch == true) 
      { 
       iyt.WinningScript(); 
      } 
    } 

    if (cm.crowdOptions == CrowdManager.CrowdTypes.TeamA) { 

     if (sm.teamScored == ScoreManager.teamsScore.TeamAScore) { 

      if (yt.yayButtonTouch == true) 
      { 
       iyt.WinningScript(); 
      } 

      if (bt.booButtonTouch == true) 
      { 
       iyt.LosingScript(); 
      } 

     } else if (sm.teamScored != ScoreManager.teamsScore.TeamAScore) { 

      if (yt.yayButtonTouch == true) 
      { 
       iyt.LosingScript(); 
      } 

      if (bt.booButtonTouch == true) 
      { 
       iyt.WinningScript(); 
      } 
    } 
} 
if (cm.crowdOptions == CrowdManager.CrowdTypes.TeamB) { 

    if (sm.teamScored == ScoreManager.teamsScore.TeamBScore) { 

      if (yt.yayButtonTouch == true) 
      { 
       iyt.WinningScript(); 
      } 

      if (bt.booButtonTouch == true) 
      { 
       iyt.LosingScript(); 
      } 

    } else if (sm.teamScored != ScoreManager.teamsScore.TeamBScore) { 

      if (yt.yayButtonTouch == true) 
      { 
       iyt.LosingScript(); 
      } 

      if (bt.booButtonTouch == true) 
      { 
       iyt.WinningScript(); 
      } 
    } 
} 

Я надеюсь, что я объяснил это достаточно хорошо.

+0

Примечание, не используйте «еще, если», когда-либо. Это никогда не решение! – Fattie

+0

Как его изменить. Я попытался избавиться от else, если и он сломал код. –

+0

Обратите внимание, что в середине вам нужно только «еще». в основном НИКОГДА НЕ ИСПОЛЬЗУЙТЕ «else if». используйте «отколовшийся» код с возвратом ... Я приведу пример. или, возможно, использовать переключатель. но не используйте else-if. просто найдите другой путь. я приведу пример для этого – Fattie

ответ

1

Возможно ли это ваше решение:

WHEN button A is touched DOWN, 
    if button B is pressedDown, 
    ... code for "both down" 

Так что вам нужно событие или что-то для «на кнопку первого нажатия вниз»

Я понятия не имею, какие странные кнопки библиотеки или что-то есть вы используете, но это общее алгоритмическое решение здесь: O

еще более общий подход заключается в следующем:

при нажатии любой кнопки на всех идет вверх или вниз, Посмотрите на обе кнопки. Фактически есть ОБА кнопки теперь «вниз» если да, то код для «обоих вниз»

, который также будет работать. Надеюсь, что это помогает


Примечания

один должны использовать подпрограммы для таких длинных пассажей коды, он не будет компилироваться, как у вас есть. Также - никогда не используйте «else-if» по какой-либо причине.

Вы должны изменить свой код так:

void Update() 
    { 
    if (cm.crowdOptions == CrowdManager.CrowdTypes.None) 
     { 
     SituationA(); 
     return; 
     } 

    if (cm.crowdOptions == CrowdManager.CrowdTypes.TeamA) 
     { 
     SituationB(); 
     return; 
     } 

    if (cm.crowdOptions == CrowdManager.CrowdTypes.TeamB) 
     { 
     SituationC(); 
     return; 
     } 

    // OR, USE A SWITCH STATEMENT FOR THOSE THREE. TRY BOTH WAYS! 
    } 

private void SituationA() 
    { 
    if (yt.yayButtonTouch == true) 
     if (bt.booButtonTouch == true) 
      iyt.WinningScript(); 
    } 

private void SituationB() 
    { 
    if (sm.teamScored == ScoreManager.teamsScore.TeamAScore) 
     { 
     if (yt.yayButtonTouch == true) iyt.WinningScript(); 
     if (bt.booButtonTouch == true) iyt.LosingScript(); 
     } 
    else 
     { 
     if (yt.yayButtonTouch == true) iyt.LosingScript(); 
     if (bt.booButtonTouch == true) iyt.WinningScript(); 
     } 
    } 

private void SituationC() 
    { 
    if (sm.teamScored == ScoreManager.teamsScore.TeamBScore) 
     { 
     if (yt.yayButtonTouch == true) iyt.WinningScript(); 
     if (bt.booButtonTouch == true) iyt.LosingScript(); 
     } 
    else 
     { 
     if (yt.yayButtonTouch == true) iyt.LosingScript(); 
     if (bt.booButtonTouch == true) iyt.WinningScript(); 
     } 
    } 
+0

Спасибо, это было здорово. Моя самая большая проблема заключается в том, что кнопка продолжает обновляться и переходит в следующее условие. –

+0

Да, это имеет гораздо больше смысла в том, как структурировать то, что я делаю. Проблема с несколькими касаниями не работает, но мне просто нужно узнать больше об этом. Пока я просто избавлюсь от него и придумаю другое решение. Спасибо за всю твою помощь! Я чувствую, что вы отвечаете на все мои вопросы :-) –

Смежные вопросы