2016-07-01 2 views
0

Моя игра в моногейме перестала отвечать на щелчки мышью. До версии 3.5 это работало нормально. Вот как я сейчас получаю вход:Monogame 3.5: Щелчок мыши не обнаружен

protected override void Update (GameTime game_time) 
    { 
    Mouse_Input (game_time); 
    } 

void Mouse_Input(GameTime game_time) 
    { 
    mouse_current = Mouse.GetState(); 

    if (mouse_current.LeftButton == ButtonState.Pressed) 
    { 
    // click 
    } 
    } 

Установка точек останова в функции откосов весь код удара, но LeftButton всегда ButtonState.Released.

Я пробовал как с проводной мышью, так и с трекпадом. Ввод клавиатуры работает нормально. Кто-нибудь еще сталкивается с этим?

+0

Вы вызываете этот код из 'Game.Update' или где-то еще? – craftworkgames

+0

Это функция Mouse_Input, вызываемая из основной функции Update, поэтому да. Я обновил вопрос, чтобы включить это. –

ответ

0

Это было на самом деле не проблема с Monogame, но проблема в моей игровой логики, было очень трудно отследить.

После обновления до 3,5 я должен был перенастроить, как загружаются мои Texture2D, что также означает рефакторинг некоторых классов. Я закончил класс в классе, который унаследовал от Game.

public class Brush_Control : Game 
    { 
    public class Tile : Game 
    { 

Процесс устранения сузил поиск до этого класса. Я считаю, что это вызвало бесконечный цикл, который каким-то образом вмешался в ввод, но не вызвал ошибку или не вызвал явного замораживания.

Удаление внутренней ссылки на игру в качестве родителя исправило проблему, и, оказывается, мне больше не нужно ее там есть.

0

Я всегда использую этот способ.

MouseState currentMouseState; 
MouseState oldMouseState; 

public bool checkClick() 
{ 
    oldMouseState = currentMouseState; 
    currentMouseState = Mouse.GetState(); 

    if (Visible) 
    { 
     if (currentMouseState.LeftButton == ButtonState.Pressed && oldMouseState.LeftButton == ButtonState.Released) 
     { 
      return true; 
     } 
    } 
} 

Если вы хотите проверить, если мышь нажимает на (элементы HUD, например) Прямоугольник

public bool checkClickRectangle(Rectangle rec) 
{ 
    oldMouseState = currentMouseState; 
    currentMouseState = Mouse.GetState(); 

    if (Visible) 
    { 
     if (rec.Contains(new Vector2(Mouse.GetState().X, Mouse.GetState().Y)) && currentMouseState.LeftButton == ButtonState.Pressed && oldMouseState.LeftButton == ButtonState.Released) 
     { 
      return true; 
     } 
    } 
} 
+0

Я также иногда управляю вводами так же, но это не изменит, что LeftButton подходит как неправильное значение. –

Смежные вопросы