2013-11-02 94 views
-1

谷歌充斥着Unity3D & XNA資源。搜索任何與C#相關的東西是非常困難的,如果結果絕不是基於Unity或XNA的。甚至找到好的教程,我不得不找到一本關於亞馬遜的書,然後用-XNA -Unity google來作者,哈哈。如何將此C++代碼轉換爲C#代碼?我忘了什麼語法?

我的C++代碼很好地組織好,每個單獨的主類都是它自己的文件。 Game.cpp,作爲main(),我的遊戲運行並調用Init,Render和Update。Game.cpp是main(),它用於調用Init,Render和Update。

class Game 
{ 
public: 
Game(); 
private: 
void Init(); 
void Update(sf::Time deltaTime); 
void Render(); 
sf::RenderWindow mWindow; 
}; 

int main() 
{ 
Init(); 

while (mWindow.isOpen()) 
{ 
    Update(TimePerFrame); 
    Render(); 
} 
} 

和當然,Init.cpp

#include "Game.hpp" 

void Game::Init() 
{ 
mWindow.setVerticalSyncEnabled(true); 
} 

現在,我有SFML的C#綁定和代碼::塊切換到VS2012。我一直在用C++工作很久,以至於我在使用C#時遇到了一些麻煩。我通過一些教程來學習語法,但還是有些東西我還沒有記住。顯然,這是一個愚蠢的問題。但是,谷歌並沒有太多的幫助,因爲C#與Unity &的XNA結果是如何被壓倒性的,我只是不記得如何做到這一點。

我想有相同的單獨的文件,

Game.cs 
Init.cs 
Update.cs 
Render.cs 

但是,我甚至不能讓它在一個類中發揮作用。

Game.cs

class Game 
{ 
    public void Main() 
    { 
     // Create the main window 
     RenderWindow mWindow = new RenderWindow(new VideoMode(1200, 1200), "SevenBlack"); 
     mWindow.Closed += new EventHandler(OnClose); 
     Color windowColor = new Color(0, 0, 0); 

     //Initialize Game 
     Init(); 

     while (mWindow.IsOpen()) 
     { 
       Update(TimePerFrame); 
     } 
      Render(); 
     } 
    } 

    private void Init() 
    { 
     mWindow.setVerticalSyncEnabled(true); 
    } 

    private void Update(long dt) 
    { 
    } 

    private void Render() 
    { 

     mWindow.Clear(windowColor); 
     mWindow.Display(); 
    } 

} 

我得到「名 'mWindow' 不在當前情況下存在。

private void Game::Init() 
    { 
     mWindow.setVerticalSyncEnabled(true); 
    } 

也不管用,因爲這是C#。

+0

爲什麼會有人低估這一點?我得到了答案...大聲笑... – user2948630

回答

2

mWindow沒有聲明爲類級變量,所以它的唯一範圍在main中。這樣做可以讓整個類中的變量都可以看到。

class Game 
{ 
    private RenderWindow mWindow; 

    public void Main() 
    { 
     // Create the main window 
     mWindow = new RenderWindow(new VideoMode(1200, 1200), "SevenBlack"); 
... 
+0

DUR!謝謝。 Idk我在想什麼。 – user2948630