【问题标题】:error CS0120: An object reference is required for the non-static field, method, or property 'SetFaces.btnA'错误 CS0120:非静态字段、方法或属性 \'SetFaces.btnA\' 需要对象引用
【发布时间】:2022-11-10 09:31:02
【问题描述】:

我有 2 个用于此操作的课程:

  • 设置面
  • 更改图像

  • 改变形象通过适当的索引它必须设置面,因此它会打印所需的特定图像。

  • 设置面包含一个带有开关盒的方法,用于将正确的图像插入到组件中。


进入类更改图像,SetFaces的调用方法是:

SetFaces.SetButtonsImages(index);

类 SetFaces这是:

public class SetFaces : MonoBehaviour
{
    public Button btnA, btnB, btnC, btnD;
    public Sprite
        Img0_A, Img0_B, Img0_C, Img0_D,
        Img1_A, Img1_B, Img1_C, Img1_D,
        /* ... */
        Img7_A, Img7_B, Img7_C, Img7_D,
        Img8_A, Img8_B, Img8_C, Img8_D;

    public static void SetButtonsImages(int index)
    {
        switch (index)
        {
            case 0:
                btnA.GetComponent<Image>().sprite = Img0_A;
                btnB.GetComponent<Image>().sprite = Img0_B;
                btnC.GetComponent<Image>().sprite = Img0_C;
                btnD.GetComponent<Image>().sprite = Img0_D;
                DebugDisplay.PrintText("Set Faces 0");
                break;

            case 1:
                btnA.GetComponent<Image>().sprite = Img1_A;
                btnB.GetComponent<Image>().sprite = Img1_B;
                btnC.GetComponent<Image>().sprite = Img1_C;
                btnD.GetComponent<Image>().sprite = Img1_D;
                DebugDisplay.PrintText("Set Faces 1");
                break;

            /* ... */

            case 8:
                btnA.GetComponent<Image>().sprite = Img8_A;
                btnB.GetComponent<Image>().sprite = Img8_B;
                btnC.GetComponent<Image>().sprite = Img8_C;
                btnD.GetComponent<Image>().sprite = Img8_D;
                DebugDisplay.PrintText("Set Faces 8");
                break;
        }
    }
}

【问题讨论】:

标签: c#


【解决方案1】:

该错误很好地解释了它。您在静态方法上调用非静态项。有3种方法可以解决这个问题

选项1

将静态添加到按钮,使其读取

public static void SetButtonsImages(int index)

选项 2

初始化SetFaces

所以你会有

var btn = new SetFaces ();

然后使用 btn 访问它们。

选项 3

让一切静止

    public static Button btnA, btnB, btnC, btnD;
    public static Sprite
        Img0_A, Img0_B, Img0_C, Img0_D,
        Img1_A, Img1_B, Img1_C, Img1_D,
        /* ... */
        Img7_A, Img7_B, Img7_C, Img7_D,
        Img8_A, Img8_B, Img8_C, Img8_D;

让我知道这对您有何帮助,以防我需要改进答案。

如需进一步参考:https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/compiler-messages/cs0120

【讨论】:

    猜你喜欢
    • 2019-06-22
    • 1970-01-01
    • 2016-05-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多