切换矩阵

本文关键字: | 更新日期: 2023-09-27 18:30:14

我买了一个切换矩阵,代码如下:

    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向导可以在数英里之外找到问题。

我想真正的问题是:

如何显示和跟踪一系列切换?

切换矩阵

这是我的尝试:

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]);
            }
        }
    }
}

最重要的是,您应该将初始化和使用分开,因为在原始版本中,每次切换状态都会重置,按下按钮不会产生持久的效果。

其次,使用前臂环来跳过篮圈,以跟踪哪一个bool伴随着它,这是一个坏主意。如果关键字和kws数组真的是不可分割的,你可能需要创建一个类或结构,它包含一个字符串和一个bool,这样它们就可以一直在一起。我在这里展示的是下一个最好的东西。如果你根据它的索引找到一个,你应该使用相同的索引来找到另一个。

最后,我在那里放了一个常见的技巧来获得网格布局。同样,网格中的位置完全由其索引驱动。你经常会看到%(模)和/(除法)像这样一起使用。

很难判断你想做什么。也许是这样的事情?

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;
        }
    }
}
相关文章:
  • 没有找到相关文章