Конфликт пространства имен Xna и System - PullRequest
0 голосов
/ 17 января 2011

Я пытаюсь объявить новый абстрактный класс

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 ()'.Используйте новое ключевое слово, если целью было скрытие.

, но я хотел бы использовать пространство имен Microsoft.Xna, а не System

Ответы [ 3 ]

0 голосов
/ 24 февраля 2011

Вы можете создать псевдонимы для своих операторов использования, чтобы избежать этой проблемы, например:

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(...);
}
0 голосов
/ 10 января 2012

Я думаю, что он, возможно, использовал это: 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
    }
}
0 голосов
/ 20 января 2011

Я не думаю, что вы хотите наследовать от: Control, если вы хотите создать элемент управления WinForms для вашего проекта XNA, пожалуйста, посмотрите примеры на 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(...);

}
...