2017-11-29 17 views
0

現在、C#でゲームエンジンを設計しています。エンジンには複数のドライバタイプ(OpenGL、DirectX)があります。ただし、ユーザーがボタンを押したときには、それぞれのドライバタイプに異なるキーコードが必要です。しかし何らかの理由で、プリプロセッサを使用していません...私は非常にそれらを使用することを忘れないでください。C#Enumeration Issue

私は本当に(ほとんどの場合のように)誰かが私がしようとしていることを理解するための最良の方法は、いくつかのコードを表示することだと思います。ここで

は私のキーコード列挙(またはその一部)である:

#define DRIVER_TYPE_OPENGL 

、私の一番上にある:私のOpenGL Windowクラスの上部に

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

、私はこれを行っています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(); 

しかし、その代わりに、私はというエラーを取得する:「キーコード 『A』の定義が含まれていません」

を私が間違って何をしているのですか?

ありがとうございました!

+0

スイッチケースを使用していない特別な理由は何ですか? –

+0

@SouvikGhosh私は列挙体の中でswitch-caseを使うことができないので、 "OpenGLKeyCode"と "DirectXKeyCode"の両方の列挙を持つことはできません。 – tdkr80

+0

@aaronはAの値を65にし、OpenGLとDirectXのキーコード値を切り替えることはできません。 – tdkr80

答えて

1

enumを移動するか、プロジェクト全体の定義を使用します。

定義は、ファイル#defineでのみ機能します。
これはヘッダー付きのC++ではなく、C#です。

+0

私はそれが事実かもしれないと考えました。プロジェクト全体の定義を使用するにはどうすればよいですか? – tdkr80

+0

@ tdkr80プロジェクトを右クリックし、[プロパティ] - > [ビルド] - > [条件付きコンパイルシンボル]をクリックします。 – Blacktempel

+0

@ tdkr80また、https://stackoverflow.com/questions/1995869/how-to-set-project-wide-define-in-c-sharp – Blacktempel