Xna和System命名空间冲突

时间:2011-01-17 00:52:39

标签: c# namespaces abstract xna-4.0

我正在尝试声明新的抽象类

using System;
using System.Drawing;
using System.Windows.Forms;
using Microsoft.Xna.Framework.Graphics;
abstract public class GraphicsDeviceControl : Control
{
    //....

    protected abstract void Update();

}

但是当我编译它时,我收到了这个警告:

  

'WinFormsContentLoading.GraphicsDeviceControl.Update()'   隐藏继承的成员   'System.Windows.Forms.Control.Update()'。   如果隐藏了,请使用new关键字   意图。

但我想使用Microsoft.Xna命名空间,而不是System

3 个答案:

答案 0 :(得分:0)

我认为你不想继承:Control,如果你想创建一个XNA项目的WinForms控件,那么请看create.msdn.com上的示例。

如果你真的希望你的XNA类继承WinForms,同时仍然有XNA.Update和Winforms.Update尝试更改方法名称,如下所示:

using System;
using System.Drawing;
using System.Windows.Forms;
using Microsoft.Xna.Framework.Graphics;
abstract public class GraphicsDeviceControl : Control
{
    //....
    public overide void System.Windows.Forms.Control.Update(...)
    protected abstract void MyNameSpace.Update(...);

}

答案 1 :(得分:0)

您可以为“使用”语句创建别名,以避免出现此问题:

using System;
using System.Drawing;
using Forms = System.Windows.Forms;
using Microsoft.Xna.Framework.Graphics;
abstract public class GraphicsDeviceControl : Forms.Control
{
    //...
    public overide void Forms.Control.Update(...)
    protected abstract void MyNameSpace.Update(...);
}

答案 2 :(得分:0)

我认为他可能一直在使用这个:http://create.msdn.com/en-US/education/catalog/sample/winforms_series_1,并想知道如何让更新周期运行。

最好的办法是使用秒表(System.Diagnostics),在初始化时初始化它,然后使用stopwatch1.Elapsed,就像它是你的gameTime变量一样。如果你将Application.Idle挂钩到Invalidate(),那么将一遍又一遍地调用Draw()函数。然后,您可以从此处调用更新功能。

我知道这已经老了,但我发现了这个,所以其他人可能会找到它。一个用于互联网。

class YourDevice : GraphicsDeviceControl
{
    private Stopwatch timer;

    protected override void Initialize()
    {
        timer = Stopwatch.StartNew();
        Application.Idle += delegate { Invalidate(); };
    }

    protected override void Draw()
    {
        Update(timer.Elapsed);
    }

    private void Update(TimeSpan gameTime)
    {
        // etc
    }
}