如何将这个C ++代码转换为C#代码?我忘记了什么语法?

时间:2013-11-02 21:21:31

标签: c# c++ visual-studio-2012 syntax

谷歌充斥着Unity3D& XNA资源。如果没有结果是基于Unity或XNA的结果,那么搜索与C#有关的任何事情是相当困难的。为了找到好的教程,我不得不在亚马逊上找到一本书,然后用-XNA -Unity来点击作者,哈哈。

我的C ++代码很好地组织在一个有组织的目录中,每个单独的主要类都是它自己的文件。

Game.cpp
Init.cpp
Render.cpp
Update.cpp

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#绑定,并从Code :: Blocks切换到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#。

1 个答案:

答案 0 :(得分:2)

mWindow未声明为类级变量,因此它的唯一范围是main。这样做是为了让变量可以在整个类中看到。

class Game
{
    private RenderWindow mWindow;

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