Si lo so il titolo non è dei più intuitivi ma non ho saputo fare di meglio...
Il problema è semplice (sulla carta) ma nn mi riesce: ho un Game Xna che all'inizio presenta un form da gestire; alla chiusura del form parte il Game che deve mostrare insieme al suo output anche il form che mostra in una label il valore di una grandezza che si aggiorna nell'Update() del Game.
E fin qui ci siamo.
Sul form c'è un button che se premuto (mentre il Game corre) deve fare ripartire il Game dall'inizio (un nuovo "run") e qui nn ci siamo, perchè mi spuntano due "form1" uno fermo e l'altro che continua fregandosene altamente e se chiudo il secondo form1 il programma mi va in errore ("Impossibile avviare un secondo ciclo di messaggi su un thread singolo. Utilizzare Form.ShowDialog.").
Come posso fare?
codice:
using System;
using System.Windows.Forms;
namespace WindowsGame
{
static class Program
{
public static Form1 form1;
public static void Main(string[] args)
{
form1 = new Form1();
form1.ShowDialog();
using (Game1 game = new Game1())
{
game.Run();
}
}
}
}
codice:
using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;
using System.Windows.Forms;
namespace WindowsGame
{
public class Game1 : Microsoft.Xna.Framework.Game
{
GraphicsDeviceManager graphics;
public int x = 0;
public static Form1 form1;
public Game1()
{
graphics = new GraphicsDeviceManager(this);
Content.RootDirectory = "Content";
}
protected override void Initialize()
{
form1 = new Form1();
form1.Show();
base.Initialize();
}
protected override void Update(GameTime gameTime)
{
x++;
form1.label1.Text = x.ToString();
base.Update(gameTime);
}
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.CornflowerBlue);
base.Draw(gameTime);
}
}
}
Ah dentro il button1_Click ho messo questa riga:
Program.Main(null);