C#枚举问题

时间:2017-11-29 05:14:40

标签: c# enums preprocessor

我目前正在使用C#设计游戏引擎。该引擎有多种驱动程序类型(OpenGL,DirectX)。但是,当用户按下按钮时,每种驱动程序类型都需要不同的键代码。但由于某种原因,使用预处理器是行不通的......请注意,我对使用它们非常新。

我真的认为(就像在大多数情况下一样)让别人理解我想要做的最好的方法就是展示一些代码。

这是我的KeyCode枚举(或其中的一部分):

public enum KeyCode
{
#if DRIVER_TYPE_OPENGL
        A = 83,
        B = 84
#elif DRIVER_TYPE_DRIECTX
        A = 65,
        B = 66
#endif
}

在我的OpenGL Window类的顶部,我已经完成了这个:

#define DRIVER_TYPE_OPENGL

在我的DirectX Window类的顶部,我已经完成了这个:

#define DRIVER_TYPE_DRIECTX

据我所知,我现在应该可以这样做:

        IDisplay display = new OpenGLDisplay(WIDTH, HEIGHT, TITLE);

        while (true)
        {
            // Do stuff with display

            // Process input like so:
            if (Keyboard.IsKeyDown(KeyCode.A))
            {
                Console.WriteLine("You're using OpenGL driver, good on you!")
            }

            // Swap buffers and stuff
        }

        display.Close();

但相反,我得到一个错误说:“KeyCode不包含'A'的定义”

我做错了什么?

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

移动枚举或使用项目范围的定义。

定义仅适用于您#define的文件。
这是C#,而不是带标题的C ++。