2013-09-01 3 views
0

Je suis nouveau dans Xna et j'ai besoin d'aide pour faire une image que lorsque je l'ai pressée et relâchée, je vais chercher un autre gamestate de code MI et trouver quelqu'un avec qui je lui ai dit mon problème pour ce faireWindows Phone Image en tant que bouton

 TouchLocation tl; 
    TouchCollection touchCollection = TouchPanel.GetState(); 


     if (tl.State == TouchLocationState.Pressed) 
     { 

      if (tl.State == TouchLocationState.Pressed) 
       if (ButtonRecPlay.Contains(new Point((int)tl.Position.X, (int)tl.Position.Y))) 
       { 
        IsPlayClicked = true; 
       } 
     } 

J'essaie cela, mais il ne fonctionnera pas quand je presse le bouton rien ne se produit le IsPlayClicked est un public bool que je l'appelle dans mon maincode est le mien code principal ici:

public class MainFile : Microsoft.Xna.Framework.Game 
{ 
    GraphicsDeviceManager graphics; 
    SpriteBatch spriteBatch; 
    ScreenStates screentState; 

    Rectangle TouchS_Y_X; 

    Logo logo; 
    Menu0 menu; 
    Choose_Pets choose_pets; 
    ScreenStates.CurrentGameState GameState; 

    public MainFile() 
    { 
     graphics = new GraphicsDeviceManager(this); 
     Content.RootDirectory = "Content"; 

     // Frame rate is 30 fps by default for Windows Phone. 
     TargetElapsedTime = TimeSpan.FromTicks(333333); 

     // Extend battery life under lock. 
     InactiveSleepTime = TimeSpan.FromSeconds(1); 

    } 


    protected override void Initialize() 
    { 
     // TODO: Add your initialization logic here 
     screentState = new ScreenStates(); 
     logo = new Logo(); 
     menu = new Menu0(); 
     choose_pets = new Choose_Pets(); 
     base.Initialize(); 

    } 


    protected override void LoadContent() 
    { 
     TouchS_Y_X = new Rectangle(0, 0, 1, 1); 
     // Create a new SpriteBatch, which can be used to draw textures. 
     spriteBatch = new SpriteBatch(GraphicsDevice); 
     GameState = ScreenStates.CurrentGameState.Logo; 

     this.logo.Load(this.Content, this.GraphicsDevice); 
     this.menu.Load_Menu(GraphicsDevice, Content); 
     this.choose_pets.Load_ChoosePet(Content, GraphicsDevice); 

     base.LoadContent(); 
    } 


    protected override void UnloadContent() 
    { 
     // TODO: Unload any non ContentManager content here 
     //this.logo.Unload_logo(Content); 
    } 

    protected override void Update(GameTime gameTime) 
    { 
     // Allows the game to exit 
     if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed) 
      this.Exit(); 

     #region Games States 

     switch (GameState) 
     { 
      case ScreenStates.CurrentGameState.Logo: 
        logo.Update_logo(gameTime); 

        if (logo.FadeOut_logo == true) 
         GameState = ScreenStates.CurrentGameState.Menu; 
        break; 

      case ScreenStates.CurrentGameState.Menu: 
       menu.Update_Menu(gameTime); 

       if (menu.IsPlayClicked == true) 
        GameState = ScreenStates.CurrentGameState.CharactersChooser; 

       break; 

      case ScreenStates.CurrentGameState.CharactersChooser: 
        choose_pets.Update_petchoose(gameTime); 
       break; 
     } 
     #endregion 

     // TODO: Add your update logic here 
     base.Update(gameTime); 
    } 


    protected override void Draw(GameTime gameTime) 
    { 
     GraphicsDevice.Clear(Color.Black); 
     spriteBatch.Begin(); 
     #region GameStateDraw 



     switch(GameState) 
     { 
      case ScreenStates.CurrentGameState.Logo:   
      logo.Draw(spriteBatch);  
      break; 

       //Menu Draw State 
      case ScreenStates.CurrentGameState.Menu: 
      menu.Draw_Menu(spriteBatch); 
      break; 

      case ScreenStates.CurrentGameState.CharactersChooser: 
       choose_pets.Draw_petChoose(spriteBatch); 
      break; 
     } 

     #endregion 

     spriteBatch.End(); 
     base.Draw(gameTime); 
    } 
} 

et ceci est mon fichier Menu0 que je l'utilise pour le menu du jeu et il a le code qui suppose de faire le bouton de presse est ici Code:

class Menu0 
    { 
    Texture2D Text2D_Background; 
    Rectangle Rec_Background; 

    Texture2D ButtonText2DPlay; 
    Rectangle ButtonRecPlay; 

    Boolean Music_playing = false; 
    public Song BackMusic; 

    TouchLocation tl; 
    TouchCollection touchCollection = TouchPanel.GetState(); 

    public bool IsPlayClicked = false; 

    MainFile main = new MainFile(); 

    public void Load_Menu(GraphicsDevice Graphics_Menu, ContentManager Content_Menu) 
    { 

     //main = new MainFile(); 

     Text2D_Background = Content_Menu.Load<Texture2D>("UI\\MenuBack"); 
     Rec_Background = new Rectangle(0, 0, Graphics_Menu.Viewport.Width, Graphics_Menu.Viewport.Height); 

     ButtonText2DPlay = Content_Menu.Load<Texture2D>("UI\\Buttons\\New Games"); 
     ButtonRecPlay = new Rectangle(350, 250, 150, 60); 

     BackMusic = Content_Menu.Load<Song>("UI\\Music_01"); 

    } 

    public void Update_Menu(GameTime Menu_GameTime) 
    { 
     if (Music_playing == false) 
     { 
      MediaPlayer.Play(BackMusic); 
      Music_playing = true; 
     } 
     MediaPlayer.Resume(); 


     if (tl.State == TouchLocationState.Pressed) 
     { 

      if (tl.State == TouchLocationState.Pressed) 
       if (ButtonRecPlay.Contains(new Point((int)tl.Position.X, (int)tl.Position.Y))) 
       { 
        IsPlayClicked = true; 
       } 
     } 
    } 

    public void Draw_Menu(SpriteBatch Spritebatch_Menu) 
    { 
     Spritebatch_Menu.Draw(Text2D_Background, Rec_Background, Color.White); 
     Spritebatch_Menu.Draw(ButtonText2DPlay, ButtonRecPlay, Color.White); 
    } 
} 

Répondre

0

Ce que vous devez faire est d'obtenir le TouchLocationState chaque cycle précédent, afin de détecter le moment où le contact vient de sortir. À ce moment-là, vous changez simplement votre gameState ou appelez la méthode dont vous avez besoin.

Quoi qu'il en soit, je vois que vous avez déclaré un TouchCollection mais vous ne l'utilise jamais:

TouchCollection touchCollection = TouchPanel.GetState(); 

Vous devez analyser cette collection et d'analyser tous les TouchLocation en elle, ou tout simplement le dernier:

if (touchCollection.Count > 0) 
{ 
    TouchLocation tl = touchCollecion.Last(); 

    if (tl.State == TouchLocationState.Released && previousState == TouchLocationState.Pressed) 
     { 
     if (ButtonRecPlay.Contains((int)tl.Position.X, (int)tl.Position.Y)) 
      IsPlayClicked = true; 
     } 
} 
+0

Beaucoup de Thx pour vous répondre Je vais l'essayer dès maintenant J'ai un problème en ce moment je vous dis si cela fonctionne quand je répare le problème xDD – user2727653

+0

AAh! beaucoup de travail cela je voulais vous donner un upvote mais je n'ai pas rep la seule chose que je peux vous donner est beaucoup thx xDDDDD^- ^/thxx !! – user2727653

+0

LOL ne vous inquiétez pas – pinckerman