2016-07-01 10 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のロード方法を再設定する必要がありました。これはまた、いくつかのクラスのリファクタリングも意味していました。私はゲームの両方を継承していたクラス内のクラスで終わった。

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; 
     } 
    } 
} 

あなたはマウスが長方形(例えばハッド要素)をクリックするかどうかを確認したい場合は

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が間違った値として出てくることを変更するつもりはありません。 –

関連する問題