Liste der Anhänge anzeigen (Anzahl: 1)
Texturen an Objekt weitergeben
Ich versuche gerade eine Klasse Button zu erstellen, an deren Erstellungsroutine ich ein Bild (Texture2D) als Parameter übergeben möchte. Das sieht dann so aus:
Code:
public Button(Texture2D textur1, Vector2 position1)
{
textur = textur1;
position = position1;
}
Das ergibt dann aber folgende Fehlermeldung:
Die beste Übereinstimmung für die überladene WindowsPhoneGame2.Game1.Button.Button(Microsoft.Xna.Framework.Graphics.Texture2D, Microsoft.Xna.Framework.Vector2, Microsoft.Xna.Framework.GraphicsDeviceManager)-Methode hat einige ungültige Argumente.
1-Argument: Kann nicht von "WindowsPhoneGame2.Game1.Button" in "Microsoft.Xna.Framework.Graphics.Texture2D" konvertiert werden.
Ich habe das Bild in der Hauptklasse geladen:
Code:
quit = Content.Load<Texture2D>("Quit");
Muss ich vieleicht das Bild in der Klasse Button laden oder den Speicherort angeben oder sonst etwas?
Ich habe weder mit C# noch mit XNA erfahrung und freue mich über jede Antwort
AW: Texturen an Objekt weitergeben
Das Problem scheint der Aufruf des Konstruktors zu sein. Poste doch mal den Code deiner Game-Klasse, in der der Button erzeugt werden soll.
AW: Texturen an Objekt weitergeben
Hier ist die Klasse. Der Button wird bei Intialize erstellt.
Code:
public Game1()
{
graphics = new GraphicsDeviceManager(this);
Content.RootDirectory = "Content";
// Frame-Rate ist standardmäßig 30 fps für das Windows Phone.
TargetElapsedTime = TimeSpan.FromTicks(333333);
}
/// <summary>
/// Ermöglicht dem Spiel die Durchführung einer Initialisierung, die es benötigt, bevor es ausgeführt werden kann.
/// Dort kann es erforderliche Dienste abfragen und nicht mit der Grafik
/// verbundenen Content laden. Bei Aufruf von base.Initialize werden alle Komponenten aufgezählt
/// sowie initialisiert.
/// </summary>
protected override void Initialize()
{
// TODO: Fügen Sie Ihre Initialisierungslogik hier hinzu
base.Initialize();
spritePosition1.X = 0; //X-Position eines Bildes
spritePosition1.Y = 0; //Y-Position eines Bildes
spritePositionquit.X = 0; //X-Position eines Bildes
spritePositionquit.Y = 0; //Y-Position eines Bildesit
Button quit = new Button(quit, spritePositionquit);
}
/// <summary>
/// LoadContent wird einmal pro Spiel aufgerufen und ist der Platz, wo
/// Ihr gesamter Content geladen wird.
/// </summary>
protected override void LoadContent()
{
// Erstellen Sie einen neuen SpriteBatch, der zum Zeichnen von Texturen verwendet werden kann.
spriteBatch = new SpriteBatch(GraphicsDevice);
quit = Content.Load<Texture2D>("Quit");
texture1 = Content.Load<Texture2D>("Background");
// TODO: Verwenden Sie this.Content, um Ihren Spiel-Content hier zu laden
}
/// <summary>
/// UnloadContent wird einmal pro Spiel aufgerufen und ist der Ort, wo
/// Ihr gesamter Content entladen wird.
/// </summary>
protected override void UnloadContent()
{
// TODO: Entladen Sie jeglichen Nicht-ContentManager-Content hier
}
/// <summary>
/// Ermöglicht dem Spiel die Ausführung der Logik, wie zum Beispiel Aktualisierung der Welt,
/// Überprüfung auf Kollisionen, Erfassung von Eingaben und Abspielen von Ton.
/// </summary>
/// <param name="gameTime">Bietet einen Schnappschuss der Timing-Werte.</param>
protected override void Update(GameTime gameTime)
{
// Ermöglicht ein Beenden des Spiels
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
this.Exit();
TouchCollection touchCollection = TouchPanel.GetState();
foreach (TouchLocation tl in touchCollection)
{
if ((tl.State == TouchLocationState.Pressed)
/* || (tl.State == TouchLocationState.Moved)*/)
{
spritePosition1.X = tl.Position.X;
spritePosition1.Y = tl.Position.Y;
}
}
// TODO: Fügen Sie Ihre Aktualisierungslogik hier hinzu
base.Update(gameTime);
}
/// <summary>
/// Dies wird aufgerufen, wenn das Spiel selbst zeichnen soll.
/// </summary>
/// <param name="gameTime">Bietet einen Schnappschuss der Timing-Werte.</param>
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.CornflowerBlue);
spriteBatch.Begin(SpriteSortMode.BackToFront, BlendState.AlphaBlend);
spriteBatch.Draw(texture1, spritePosition1, Color.White);
spriteBatch.End();
// TODO: Fügen Sie Ihren Zeichnungscode hier hinzu
base.Draw(gameTime);
}
AW: Texturen an Objekt weitergeben
Ich hab den Fehler jetzt gefunden. Natürlich kann ich die Texture quit nicht bei Intialize benutzen wenn sie erst bei loadcontent geladen wird. Trotzdem Danke.