2017-06-01 64 views
-8

我正在嘗試製作一個簡單的演示文稿應用程序,但我無法弄清楚如何讓進度條工作。基本上酒吧將有7個點,這是與演示文稿幻燈片相同的數字。當用戶在演示文稿5時,我想讓進度條5分,同時將當前演示文稿的精靈更改爲綠色,之前全部更改爲藍色。當用戶轉到下一個我將點6更改爲綠色,將前5更改爲藍色等等。我有「下一個」和「上一個」按鈕。我試圖做到這一點,但我無法讓邏輯工作,因爲我想。Unity:進度條

1 - 我似乎無法得到當前的幻燈片索引,所以我可以點切換到綠色精靈

2 - 有一點是永遠不會在它的影響,我不知道爲什麼..

這是我迄今爲止。

public Image[] sliderDotsImages; 
private int sliderIndex = 0; 


private bool nextBtn; 
private bool isPower; 


public Sprite currentState; 
public Sprite oldState; 
public Sprite blankState; 

private void Dots() 
{ 
    if (sliderDotsImages.Length > 7 || sliderIndex < 0) return; 



    if (nextBtn) 
    { 

     if (sliderDotsImages.Length >= sliderIndex) 
     { 
      for (int i = 0; i < sliderIndex; i++) 
      { 
       sliderDotsImages[sliderIndex].enabled = true; 

      //   sliderDotsImages[i].sprite = oldState; 
      } 

     } 
    } 

    else 
    { 
     Debug.Log (sliderIndex); 
     sliderDotsImages[sliderIndex].enabled = false; 

    } 
} 

// Event attached to button 
public void Next() 
{ 
    if (sliderIndex < 0) sliderIndex = 0; 
    nextBtn = true; 

    // add point 
    sliderIndex++; 

    // Refresh dots 
    Dots(); 
} 


// Event attached to button 
public void Previous() 
{ 
    if (sliderIndex > 7) sliderIndex = 7; 

    nextBtn = false; 
    sliderIndex--; 
    Dots(); 

} 
+0

不應該'sliderDotsImages [sliderIndex] .enabled = true;'是'sliderDotsImages [i] .enabled = true;'? – Draco18s

+0

我不這麼認爲。我只想啓用索引,而不是所有的點 – David

+0

好吧,你是對的。但是,我怎樣才能得到當前的指數,所以我可以將它切換到綠色和舊點到藍色? – David

回答

2

Egads花了一點時間,想通過評論找出問題的提問者在地球上出了什麼問題。現在我明白這個班應該做什麼了...以下是你如何解決這個問題。

溝這個循環,你不需要它,它只是使你的問題糟糕因爲你,如果你是第6頁不需要看精靈第1頁有沒有辦法精靈對於第1頁需要修改。永遠都是。不,即使如此。

你有一個3狀態系統,需要跟蹤「以前訪問」「尚未訪問」和「目前正在查看」。你不能用一個布爾值來做到這一點。然而,我們可以使用我們對系統知道的一些祕訣:唯一需要更新的點是我們只看和我們即將看到的

也(兩次)說你不知道如何「獲得當前的幻燈片索引」儘管有一個變量字面上是什麼東西:sliderIndex

然後。

public void Next() 
{ 
    if (sliderIndex >= 6) return; //if on page 7, abort: there is no page 8 
    sliderDotsImages[sliderIndex].sprite = oldState; //#1, #2 
    sliderIndex++; //#3 
    sliderDotsImages[sliderIndex].sprite = currentState; //#4 
    sliderDotsImages[sliderIndex].enabled = true; //#5 
} 

public void Previous() 
{ 
    if (sliderIndex <= 0) return; //if on page 1, abort: there is no page 0 
    sliderDotsImages[sliderIndex].sprite = oldState; //#1, #2 
    sliderIndex--; //#3 
    sliderDotsImages[sliderIndex].sprite = currentState; //#4 
} 

這是這樣做:

  1. 我們得到代表,我們只是在看網頁的點。
  2. 我們將它的精靈設置爲舊的(藍色)。
  3. 然後我們切換到我們即將查看的頁面。
  4. 我們將這個人的精靈設置爲當前(綠色)
  5. 如果我們轉到下一張幻燈片,我們也啓用了圖像。我們永遠不需要禁用它,因爲一旦我們查看了一個頁面,它就會被查看。

此外,如果我們的精靈索引超出限制使其值成爲有效範圍,我們將不會做出奇怪的事情,而是通過儘早返回來防止它超出範圍。

+0

你好。謝謝,但是在前一次,當我回到前面的點應該回到空白,因爲我們還沒有達到他們,因爲我們回去 – David

+0

把'sliderDotsImages [sliderIndex] .enabled = false'行#2和Previous()方法中的#3。 – Draco18s

+0

好的還有一件事。如果我有按鈕,直接帶我滑動3我需要刷新進度條,以顯示第3點爲綠色和點1,2爲藍色。我可以只設置sliderIndex = 3? – David