0

私は c# が初めてで、winform でグローバル オブジェクト インスタンスを呼び出す方法を探しています。

 namespace BeastEngine {
     public partial class Form1 : Form
     {

          private  Root mRoot = new Root();
          private  RenderWindow mWindow;
          private  SceneManager mgr = mRoot.CreateSceneManager(SceneType.ST_GENERIC);
          private Camera cam = mgr.CreateCamera("Camera");

現在、変数をそのように呼び出していますが、さまざまなエラーが発生しています。

private void meshToolStripMenuItem_Click(object sender, EventArgs e)
      {
          Entity ent = mgr.CreateEntity("ninja", "ninja.mesh");
          mgr.RootSceneNode.CreateChildSceneNode().AttachObject(ent);
          cam.LookAt(ent.BoundingBox.Center);
      }

すべての関数が 1 つのインスタンスを使用できるようにします。誰か適切な方法を知っていますか?私はどこでもグーグルで検索しました。

4

2 に答える 2

1

Singleton パターンを探しています。それを検索すると、さらに多くの結果が得られるはずです。

Singleton の実装に関する Microsoft の推奨事項は次のとおりです。

于 2013-03-03T03:29:58.890 に答える
0

コンストラクタの外でインスタンス変数を使用することはできません

private Root mRoot = new Root();
private SceneManager mgr = mRoot.CreateSceneManager(SceneType.ST_GENERIC);
private Camera cam = mgr.CreateCamera("Camera");

コンストラクターでこれをインスタンス化する必要があります。

private Root mRoot;
private SceneManager mgr;
private Camera cam;

public Form1()
{ 
    mRoot = new Root();
    mgr = mRoot.CreateSceneManager(SceneType.ST_GENERIC);
    cam = mgr.CreateCamera("Camera");
}

これが構築時にのみ作成されることがわかっていることを確認したい場合は、変数を作成できますreadonly

コンストラクタの記事はこちら

詳細については、Jon Skeet の回答をご覧ください。

于 2013-03-03T03:28:58.847 に答える