2015-09-07 4 views
1

Мне интересно, что лучший способ сделать кнопку в MonoGame. Я попытался найти ответ, но, похоже, никого не было. Неправильно ли использовать кнопки WinForm? Если да, то какие существуют жизнеспособные альтернативы?Создание кнопки Xna/MonoGame

+0

Это * плохая практика *? Это зависит от того, что вы пытаетесь сделать. Это кнопка для использования в игре (например, кнопка «Воспроизвести» на экране заголовка) или вы пытаетесь сделать какой-то редактор уровней? – craftworkgames

+0

@craftworkgames Это было бы для использования в игре – madfjlkfafads

ответ

4

Мне всегда нравится создавать пользовательский класс кнопок, это дает мне большую гибкость при создании креативных кнопок.

Класс создает кнопку с текстурой и позицией x и позицией y и уникальное имя после того, как я сделал это, я проверю положение мыши и посмотрю, находится ли она внутри кнопки или нет, если она внутри кнопки он может щелкнуть по кнопке, и он будет искать кнопку по имени и выполнить заданную команду :)

Вот пример моего класса кнопок: (не лучший способ, но эй отлично работает для меня)

public class Button : GameObject 
    { 
     int buttonX, buttonY; 

     public int ButtonX 
     { 
      get 
      { 
       return buttonX; 
      } 
     } 

     public int ButtonY 
     { 
      get 
      { 
       return buttonY; 
      } 
     } 

     public Button(string name, Texture2D texture, int buttonX, int buttonY) 
     { 
      this.Name = name; 
      this.Texture = texture; 
      this.buttonX = buttonX; 
      this.buttonY = buttonY; 
     } 

     /** 
     * @return true: If a player enters the button with mouse 
     */ 
     public bool enterButton() 
     { 
      if (MouseInput.getMouseX() < buttonX + Texture.Width && 
        MouseInput.getMouseX() > buttonX && 
        MouseInput.getMouseY() < buttonY + Texture.Height && 
        MouseInput.getMouseY() > buttonY) 
      { 
       return true; 
      } 
      return false; 
     } 

     public void Update(GameTime gameTime) 
     { 
      if (enterButton() && MouseInput.LastMouseState.LeftButton == ButtonState.Released && MouseInput.MouseState.LeftButton == ButtonState.Pressed) 
      { 
       switch (Name) 
       { 
        case "buy_normal_fish": //the name of the button 
         if (Player.Gold >= 10) 
         { 
          ScreenManager.addFriendly("normal_fish", new Vector2(100, 100), 100, -3, 10, 100); 
          Player.Gold -= 10; 
         } 
         break; 
        default: 
         break; 
       } 
      } 
     } 
     public void Draw() 
     { 
      Screens.ScreenManager.Sprites.Draw(Texture, new Rectangle((int)ButtonX, (int)ButtonY, Texture.Width, Texture.Height), Color.White); 
     } 
} 
Смежные вопросы