IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

XNA/Monogame Discussion :

Afficher une form avant de lancer le jeux


Sujet :

XNA/Monogame

  1. #1
    Membre régulier

    Inscrit en
    Février 2009
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 106
    Points : 71
    Points
    71
    Billets dans le blog
    1
    Par défaut Afficher une form avant de lancer le jeux
    Bonjour a tous et bienvenu dans un chapitre problématique que je vous propose comme d'habitude
    bon c'est tout simple et tout bête mais ca veux pas marcher.
    j'aimerai afficher une form qui contien des controle avant de lancer celle qui contien mon jeux, pour cela j'ai bien entendu crée une form avec des boutton et apres j'ai du modifier le fichier "Program.cs" pour qu'il lance une nouvel instance de ma form comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
            static void Main(string[] args)
            {
                using (Game1 game = new Game1())
                {
                    //game.Run();
                    access form = new access();
                    form.Show();
                }
            }
    le problem c'est que ma form aparait et puis l'application se termine si vite.
    je pense parsque la form "game" qui contien le jeux ne s'initialise pas c'est pour ca que l'application s'arrete, la preuve c'est que, quand j'appel les 2 form tout marche tres bien, ors moi je veux afficher la premier pour fair un controle d'accée puis lancer celle du jeux.

    j'ai méme afficher ma form hors de la methode comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    static void Main(string[] args)
            {
     
                access form = new access();
                form.Show();
     
                /*using (Game1 game = new Game1())
                {
                    game.Run();
                    
                }*/
            }
    c'est tout, a vous messieurs

  2. #2
    Membre régulier Avatar de LeonardL
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 57
    Points : 71
    Points
    71
    Par défaut
    Dans la point d'entrée de l'application, tu dois te contenter d'afficher ta form :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    static void Main(string[] args)
    {
        access form = new access();
        form.Show();
    }
    Après, c'est seulement sur l'évènement click du contrôle qui doit déclencher l'ouverte du jeu que tu écriras :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    private void TonControle_Click(gnagnagna)
    {
        using (Game1 game = new Game1())
        {
            game.Run();
         }
    }

  3. #3
    Membre régulier

    Inscrit en
    Février 2009
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 106
    Points : 71
    Points
    71
    Billets dans le blog
    1
    Par défaut
    c'est se que j'avais fait LeonardL
    le problème c'est que la fenêtre disparait aussitôt qu'elle apparait et l'application se termine

  4. #4
    Membre régulier Avatar de LeonardL
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 57
    Points : 71
    Points
    71
    Par défaut
    Ouais le problème c'est que les deux boucles (celle de la fenetre et celle du jeu) peuvent pas cohabiter sur le même thread. Donc en fait, quand on appuie sur le bouton dans ta fenetre, faut lancer le jeu dans un nouveau thread.

    Program.cs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    static class Program
    {
        static void Main(string[] args)
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }
    Form1.cs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
     
        private void button1_Click(object sender, EventArgs e)
        {
            ThreadStart threadStart = new ThreadStart(StartGame);
     
            Thread thread = new Thread(threadStart);
            thread.Start();
        }
     
        private void StartGame()
        {
            using (Game1 game = new Game1())
            {
                game.Run();
            }
        }
    }

  5. #5
    Membre régulier Avatar de SkYsO
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    217
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 217
    Points : 122
    Points
    122
    Par défaut
    Salut,

    est ce qu'il n'y pas de paramètre en plus à fournir à la méthode show ? ou un autre "Show"
    Par exemple en Delphi, on fait ShowModal pour notre form ce qui "bloque" la suite.
    Tant que la form n'est pas détruite le programme ne passe pas à la ligne suivante qui sera Application.Terminate.

    Par contre la form est active et l'utilisateur peut travailler dessus.

  6. #6
    Membre régulier

    Inscrit en
    Février 2009
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 106
    Points : 71
    Points
    71
    Billets dans le blog
    1
    Par défaut
    Merci pour tout ces infos mais mon compilateur ne reconnai pas cette commande : "Application".
    tous ces ligne sons érroné dans mon compilateur, ai-je besoin d'inclure un fichier dans la partie using ?

  7. #7
    Membre régulier Avatar de LeonardL
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 57
    Points : 71
    Points
    71
    Par défaut
    SkySo => je crois (si j'ai bien compris) que son but est d'avoir la fenêtre Winforms et celle XNA active en même temps. Donc à part la solution des threads différents, je vois pas comment faire :s

    the-morpher => dans ton program.cs, ajoutes un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    using System.Windows.Forms;
    Et dans le Form1.Cs, ajoutes un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    using System.Threading;

  8. #8
    Membre régulier

    Inscrit en
    Février 2009
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 106
    Points : 71
    Points
    71
    Billets dans le blog
    1
    Par défaut
    ta question est plutôt une réponse SkYsO.
    j'ai utilisé une showDialog, elle stop l'exécution du reste du code tant que la fenêtre est toujours présente.
    merci aussi LeonardL pour ton soutien, en féte j'aimerai avoir un avis sur quelque chose de futile si on veux lol
    j'ai laissé tombé le developpement du jeux 3d parsque j'avais du mal a créer un personnage 3d sous 3ds max, je veux dire par la "un vrai personnage assé cool, pas des cercle et des carreaux", peut a peut j'ai réussi a crée un avec des textures et des bonnes (chui devenu pro, je sais utilisé des bonnes dans 3dmax ) et j'ai réussi a faire en sorte que l'enveloppe corporelle de mon personnage bouge quand les bonne bouge aussi.
    MAIS apres avoir exporté cela, C# me dis un truc du genre, "erreur dans les bonnes, incapable de trouvé le bonne maitre ou root ou ché pas quoi", j'ai bien réassigné le root bonne a une bonne mais que dal.
    j'ai recrée un personnage simple a la con avec des bonnes, mais quand je change de position et exporte, C# m'affiche le personnage dans la 1ere état dans il été quand il a été modelé.
    enfin apres avoir passé 3jour sur le nouveau 3dsmax 2010 (qui as besoin d'une mise a jour pars qu'il se plante tout le temps surtout a cause des CTRL+Z) j'ai du laissé tombé.
    c'est une réaction normal que tout le monde subit ou y a un autre avis comme "non tkt, essai just de faire cette technique comme j'ai fait et tu réussira a tout métre en marche"

  9. #9
    Membre régulier

    Inscrit en
    Février 2009
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 106
    Points : 71
    Points
    71
    Billets dans le blog
    1
    Par défaut
    désolé de ne pas avoir bien expliqué LeonardL.
    je voulais juste accédé a une form avant de procéder a mon jeux.
    et celle du showDialog fait l'affaire.
    merci beaucoup pour ton aide

  10. #10
    Membre régulier

    Inscrit en
    Février 2009
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 106
    Points : 71
    Points
    71
    Billets dans le blog
    1
    Par défaut
    a part mon ancienne question qui est hors du propos de ce poste, mon probleme est toujour la.
    je veux dire que le processus se stop tres bien, le temps que je verifie mes donnée, mais quand la validation se fait et que je veux lancer mon jeux il me dis une erreur :
    Starting a second message loop on a single thread is not a valid operation. Use Form.ShowDialog instead.

    voici mon code qui declanche mon jeux apres avoir validé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    if (result == 1)
    {
      MessageBox.Show("Login successfuly");
     
      using (Game1 game = new Game1())
      {
        game.Run();
      }
     
     }
     else if (result == 2)
     {
       MessageBox.Show("Error, login incorrect");
     }
    d'ou le variable résult =1 si le login et mot de apsse sont corrécte, et a 2 si c'est faux.

    et j'ai enlevé le lancement du jeux dans la fonction Main du fichier Program.cs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    static void Main(string[] args)
            {
     
                access form1 = new access();
                form1.ShowDialog();
     
                /*using (Game1 game = new Game1())
                {
                    game.Run();
                 
                }*/
            }

  11. #11
    Membre régulier Avatar de SkYsO
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    217
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 217
    Points : 122
    Points
    122
    Par défaut
    En effet, pour mes parties de code c'était du Delphi pour illustrer mais pas du c# donc ça ne pouvait fonctionner en l'état.

  12. #12
    Membre régulier

    Inscrit en
    Février 2009
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 106
    Points : 71
    Points
    71
    Billets dans le blog
    1
    Par défaut
    j'ai trouvé un astuce, enfin ON ma trouvé un astuce
    c'est que j'affiche ma dialogue forme qui est elle méme initialisé grace a un variable qui recois la valeur de retour quand ca se termine, enfin voici le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    access form1 = new access();
    DialogResult dr = form1.ShowDialog();
     
    if (dr == DialogResult.OK)
    {
      using (Game1 game = new Game1())
      {
      game.Run();
      }
    }
    et dans la feuille form1 je met en sorte que la valeur retourné devien "ok" si le traitement s'est bien passé et a "no" si c'est érroné comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    ...
    if (result == 1)
    {
    MessageBox.Show("Login successfuly");
    this.DialogResult = DialogResult.OK; // ici on force le retour de la valeur OK
    this.Close();
    ...
    ...
    else if (result == 2)
    {
    MessageBox.Show("Error, login incorrect");
    this.DialogResult = DialogResult.No; // ici quand ca pête lol
    this.Close();
    }

  13. #13
    Membre régulier Avatar de LeonardL
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 57
    Points : 71
    Points
    71
    Par défaut
    Si j'ai bien compris, tu te fais un petit système de login au démarrage de ton jeu ?
    Pourquoi ne pas utiliser celui fournit par la plate-forme Live (qui roxe tout) ?

  14. #14
    Membre régulier

    Inscrit en
    Février 2009
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 106
    Points : 71
    Points
    71
    Billets dans le blog
    1
    Par défaut
    salut
    en fait c'est tout con.
    je crée une zone de login avant même que je crée mon jeux .
    cela est du pars que je dois savoir ou se trouve le personnage avant de lancer le jeux, pour cela j'ai crée un fichier de sauvegarde XML qui contiens le nom,la chambre/terrain,position X et Y dans la chambre/terrain.
    après j'accède a une fonction specifique a cette chambre et je charge les textures appropriés.
    bon j'ai réussi a faire cette zone d'accès MAIS ce lui de la plateforme LIVE, je connais pas, explique stp LeonardL

Discussions similaires

  1. swing afficher une image avant la fenetre
    Par gripin dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 25/04/2006, 23h21
  2. [VB.Net] Afficher une form dans un SplitterPanel
    Par nico-pyright(c) dans le forum Windows Forms
    Réponses: 2
    Dernier message: 13/04/2006, 20h45
  3. [C#]Afficher une forme sans qu'elle se ferme
    Par gilles641 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 30/03/2006, 12h25
  4. Afficher une form ou un cadre dans un panel
    Par miniil dans le forum Langage
    Réponses: 2
    Dernier message: 11/10/2005, 00h54
  5. [VC++ 6] Boutons permettant d'afficher une form
    Par cooladn dans le forum MFC
    Réponses: 3
    Dernier message: 09/12/2004, 16h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo