簡體   English   中英

Xna和系統名稱空間沖突

[英]Xna and System namespace conflict

我正在嘗試聲明新的抽象類

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命名空間,而不是系統

我不希望您從以下控件繼承:如果要創建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(...);

}

您可能可以為“ using”語句創建別名,從而避免出現以下問題:

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(...);
}

我認為他可能一直在使用: 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
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM