2011-01-17 7 views
0

ich versuche, neue abstrakte Klasse declarateXna und System-Namespace Konflikt

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

    protected abstract void Update(); 

} 

, aber wenn ich es kompiliert hatte ich diese Warnung bekam:

'WinFormsContentLoading.GraphicsDeviceControl.Update()' verbirgt geerbtes Mitglied 'System.Windows.Forms.Control.Update()'. Verwenden Sie das neue Schlüsselwort, wenn das Verstecken beabsichtigt war.

aber ich möchte Microsoft.Xna Namespace verwenden, nicht-System

+1

Im Microscaft.Xna-Namespace gibt es kein Control. Es ist unklar, was Sie eigentlich erreichen möchten - entweder möchten Sie XNA-Inhalt in Windows Forms Control zeichnen oder Updat eof Microsoft.Xna.Framework.Game/Microsoft.Xna.Framework .GameComponent implementieren. –

Antwort

0

Ich glaube nicht, Sie erben wollen: Kontrolle, wenn Sie eine WinForms Kontrolle über Ihre XNA-Projekt erstellen wollen, dann wenden Sie sich bitte Sehen Sie sich die Beispiele auf create.msdn.com an.

Wenn Sie wirklich wollen, um Ihre XNA Klasse von WinForms erben, während immer noch beide haben die XNA.Update und die Winforms.Update versuchen, die Methodennamen zu ändern wie folgt aus:

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

} 
0

Sie können eventuell erstellen Aliase für Ihre Aussagen ‚mit‘ diesem Problem zu vermeiden, wie so:

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

ich denke, dass er diese wurde unter Verwendung kann: http://create.msdn.com/en-US/education/catalog/sample/winforms_series_1 und fragt, wie ein Update-Zyklus zu laufen zu bekommen.

Am besten verwenden Sie eine Stoppuhr (System.Diagnostics), initialisieren Sie es initialisieren und verwenden Sie dann stopwatch1.Elapsed wie es ist Ihre GameTime-Variable. Wenn Sie Application.Idle mit Invalidate() verbinden, wird die Draw() -Funktion immer wieder aufgerufen. Sie können dann von hier aus eine Update-Funktion aufrufen.

Ich weiß, das ist alt, aber ich habe das gefunden, damit jemand anderes es finden kann. Einer für die Internets.

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 
    } 
}