2014-11-13 62 views
0

的我買切換矩陣與下面的代碼:矩陣切換

int amount = 27; 
    string[] keywords = new string[amount]; 
    bool kws[]= new bool[amount]; 
    for(int i=0;i<amount;i++) 
     keywords[i]=""+i; 
    int columns = 7; 
    int rows = 4; 
    int index=0; 
    int y=30+30* index; 
    int x=0; 
    int element=0; 
    foreach(string kw in keywords){ 
     element++; 
     if(kws [index] = GUI.Toggle (new Rect (x, y, 100, 30), kws [index], kw)){ 
      Debug.Log("Selected: "+kw); 
     } 
     index++; 
     x+=100; 
     if(element>rows){ 
      //Reset for the next row 
      x=0; 
      element=0; 
      y+=30; 
     } 
    } 

但是,當我點擊切換不同的一個顯示爲選中。它似乎是以每塊爲基礎。我仍然無法找出缺陷在哪裏,因爲每個切換都分配給不同的kws來保存它的狀態。

也許一個C#/ Unity可以從數英里外找出問題。

我想真正的問題是:

如何顯示,並保持了一系列切換的軌道?

回答

1

這是我在它去:

using UnityEngine; 
using System.Collections; 
using System.Collections.Generic; 

public class NewBehaviourScript : MonoBehaviour 
{ 
    string[] keywords; 
    bool[] kws; 

    void Awake() 
    { 
     int amount = 27; 
     keywords = new string[amount]; 
     kws = new bool[amount]; 
     for (int i = 0; i < amount; i++) keywords[i] = "" + i; 
    } 

    void OnGUI() 
    { 
     int columns = 4; 
     int x, y; 
     for (int index = 0; index < keywords.Length; index++) 
     { 
      x = 100 * (index % columns); 
      y = 30 * (index/columns) + 30; 
      bool oldValue = kws[index]; 
      kws[index] = GUI.Toggle(new Rect (x, y, 100, 30), kws[index], keywords[index]); 
      if (kws[index] != oldValue) 
      { 
       Debug.Log("Switched: " + keywords[index] + " to " + kws[index]); 
      } 
     } 
    } 
} 

最重要的是你要分開的初始化和使用,因爲在原始版本的每一次並按下切換狀態是復位按鈕將沒有持久效果。

其次,使用foreach循環只能跳過箍環以跟蹤哪些布爾符合它是一個壞主意。如果關鍵字和kws數組真的是不可分的,你可能需要創建一個類或結構來保存一個字符串和一個bool,這樣它們就可以隨時在一起。我在這裏展示的是下一個最好的東西。如果根據其索引找到一個,則應該使用相同的索引來查找另一個索引。

最後我把一個經常看到的技巧,在那裏獲得網格佈局。再次,網格中的位置純粹是由其索引驅動的。你會經常看到%(模)和/(除法)一起使用。

+0

這個位置沒有工作(x,y),因爲它們之間有一堆,但除此之外,主要問題仍然存在。我會繼續玩它。初始化已經完成了一次,只是在這裏添加了這個例子。 – javydreamercsw

+0

問題出在我身邊,這段代碼有效。 – javydreamercsw

0

說出你想要做的事有點難。也許這樣?

const int amount = 27; 
bool[] kws = new bool[amount]; 

void OnGUI() 
{ 
    string[] keywords = new string[amount]; 
    for(int i=0;i<amount;i++) 
     keywords[i]=""+i; 
    int columns = 7; 
    int rows = 4; 
    int index=0; 
    int y=30+30* index; 
    int x=0; 
    int element=0; 
    foreach(string kw in keywords){ 
     element++; 
     bool selected = GUI.Toggle (new Rect (x, y, 100, 30), kws [index], kw); 
     if(selected && !kws [index]) 
     { 
      Debug.Log("Selected: "+kw); 
     } 
     kws[index] = selected; 
     index++; 
     x+=100; 
     if(element>rows){ 
      //Reset for the next row 
      x=0; 
      element=0; 
      y+=30; 
     } 
    } 
} 
+0

基本上這是我正在做的,只是給每個切換一個不同的布爾。您正在將它們初始化爲kws [index],但未跟蹤進一步的更改。 – javydreamercsw