2016-11-03 1 views
-1

Voici un fichier de classe que j'ai pour la création de bouton:Je ne sais pas si mon fichier de classe bouton ne fonctionne que dans un GameState

class Button 
{ 
    Texture2D buttonTexture; 
    Rectangle buttonRectangle; 
    Color buttonColour = new Color(255, 255, 255, 255); 
    public Vector2 size, buttonPosition; 

    public Button(Texture2D newButtonTexture, Vector2 newSize) 
    { 
     buttonTexture = newButtonTexture; 
     size = newSize; 
    } 

    public void setPosition(Vector2 newButtonPosition) 
    { 
     buttonPosition = newButtonPosition; 
    } 

    bool down; 
    public bool isClicked; 

    public void Update(MouseState mouse) 
    { 
     buttonRectangle = new Rectangle((int)buttonPosition.X, (int)buttonPosition.Y, (int)size.X, (int)size.Y); 

     Rectangle mouseRectangle = new Rectangle(mouse.X, mouse.Y, 1, 1); 

     if (mouseRectangle.Intersects(buttonRectangle)) 
     { 
      if (buttonColour.A == 255) 
       down = false; 
      if (buttonColour.A == 0) 
       down = true; 
      if (down) 
       buttonColour.A += 3; 
      else 
       buttonColour.A -= 3; 
      if (mouse.LeftButton == ButtonState.Pressed) 
       isClicked = true; 
     } 
     else if (buttonColour.A < 255) 
     { 
      buttonColour.A += 3; 
      isClicked = false; 
     } 
    } 

    public void Draw(SpriteBatch spriteBatch) 
    { 
     spriteBatch.Draw(buttonTexture, buttonRectangle, buttonColour); 
    } 
} 

Voici comment je crée les boutons LoadContent (Ignore les paramètres minables il est juste la façon dont je fais actuellement il):

btnResume = new Button(Content.Load<Texture2D>("Buttons/button_Resume"), new Vector2(GraphicsDevice.Viewport.Width/1.875f, GraphicsDevice.Viewport.Height/4)); 
btnResume.setPosition(new Vector2(GraphicsDevice.Viewport.Width/2 - (0.5f*btnResume.size.X), GraphicsDevice.Viewport.Height/3)); 
btnQuit = new Button(Content.Load<Texture2D>("Buttons/button_Exit"), new Vector2(GraphicsDevice.Viewport.Width/1.875f, GraphicsDevice.Viewport.Height/4)); 
btnQuit.setPosition(new Vector2(GraphicsDevice.Viewport.Width/2 - (0.5f*btnQuit.size.X), GraphicsDevice.Viewport.Height - (GraphicsDevice.Viewport.Height/3))); 

Et voilà comment je dessine les deux boutons dans la fonction de tirage de Game1.cs:

case GameState.Menu: 
    btnResume.Draw(spriteBatch); 
    btnQuit.Draw(spriteBatch); 
    break; 

Tout cela fonctionne très bien. Pour quelque raison que ce soit, quand on fait la même chose pour un bouton "Play" pour mettre un nouvel état de jeu appelé "MainMenu", le bouton n'apparaît pas (j'ai testé mettre le code du bouton dans l'état du jeu "menu" et le bouton apparaît, il ne s'affichera pas dans n'importe quel autre état de jeu autre que "menu").

Est-ce que quelqu'un sait pourquoi cela ne fonctionnera pas? Je me suis souvenu de créer le bouton, définir la position, puis dessiner dans la partie "case GameState.MainMenu" de la fonction de dessin dans Game1.cs, donc honnêtement, je n'ai aucune idée pourquoi cela ne fonctionne pas. En guise de remarque, j'ai essayé de dessiner des boutons pour un autre état de jeu appelé "CharacterSelection" et ça ne marche pas non plus, mais ça marche quand j'utilise spriteBatch.Draw (donc je suis sûr que c'est un problème avec le bouton fonction de dessin de la classe

Je peux fournir des captures d'écran du code ou des éléments du jeu, et je suis désolé si le code est en désordre, j'ai tendance à le faire beaucoup: c'est mon premier jeu XNA et j'ai non codé en C# beaucoup dans le passé donc beaucoup de ce qui est nouveau pour moi

EDIT:.
Voici mes gamestates:

enum GameState 
{ 
    Opening, 
    MainMenu, 
    CharacterSelection, 
    Countdown, 
    Playing, 
    Menu, 
    Options, 
} 
GameState CurrentGameState = GameState.Opening; 

Ouverture - Cinématique d'ouverture Menu principal - Écran de titre essentiellement Sélection de personnage - sélectionnez le personnage à jouer. Compte à rebours - 3,2,1 GO avant le début de la partie. Lecture - Le jeu est actif, les joueurs jouent e.t.c Menu - Menu Pause (s'ouvre lorsque vous appuyez sur Echap) Options - Lorsque vous appuyez sur "Options" dans la pause ou le menu principal (n'a pas encore été configuré).

+0

Dans le menu gamestate.main, dessinez-vous autre chose que btnResume et btnQuit? –

+0

Je dessine "btnResume" et "btnQuit" dans le menu "Menu" uniquement. Le programme passera à ce gamestate si j'appuie sur escape alors que je suis dans le gamestate "playing" (c'est juste une simple déclaration if). Le problème réside dans le fait qu'aucun autre bouton ne peut être dessiné en dehors du menu gamestate. Dans le menu principal gamestate, j'ai seulement: IsMouseVisible = true; btnPlay.Draw (spriteBatch); et c'est tout. Dans « Update » J'ai quelque chose qui teste si btnPlay est pressé (btnPlay est ce qui serait le bouton de lecture dans le menu principal) –

+0

Voici mes gamestates: ENUM GameState { Ouverture, MainMenu, CharacterSelection, Compte à rebours, jouer, Menu, options, } ouverture - ouverture du cinéma Menu principal - écran Titre essentiellement Sélection de caractères - sélectionnez ce personnage à jouer. Compte à rebours - 3,2,1 GO avant le début de la partie. Lecture - Le jeu est actif, les joueurs jouent, etc. Menu - Menu Pause (s'ouvre lorsque vous appuyez sur Echap) Options - Lorsque vous appuyez sur "Options" dans la pause ou le menu principal (n'a pas encore été configuré) –

Répondre

0

Merci pour l'aide, mais je l'ai résolu. Erreur stupide par moi! Oublié "btnPlay.Update (souris);" dans ma fonction de mise à jour! -0-