# Boolean change when clicking the left mouse button (not working)

I want to change a boolean when I click the left mouse button, but it doesn't work as expected. I use this method:

if (m.LeftButton == ButtonState.Released && m_Old.LeftButton == ButtonState.Pressed)
{
if (second)
{
second = false; // Boolean changes
} else
{
second = true; // Boolean changes
}
}


I need a way to tell the code that I only want one change. When I click the left mousebutton, the second boolean changes constantly. The reason for this is that the code keeps executing until m_Old (the old mousestate) is updated. (m & m_Old must be different for this code to run)

An example (when I click the left mouse button once| these are the results for the second boolean):

My mouse update code:

// Mouse stuff
oldMouse = mouse;
mouse = Mouse.GetState();

• It's kind of difficult trying to figure out what you're trying to achieve with this code by looking at it. Can you describe the end goal? Mar 28 '16 at 23:51
• @craftworkgames I try to change a boolean from true to false and the other way around. This is usefull because I can now use two different Mouse clicks (true & false) for the same button. I use these clicks for picking up and dropping an item in the inventory in my game. I already found another solution to this problem. I use a stopwatch now instead of a boolean variable but I'm still curious for this answer. Mar 28 '16 at 23:58

Ah I think I understand the problem now. It's not really clear from the code you've posted what the problem is but I think it might have something to do with second being declared in the local scope.

I tested the code below and I believe it's working as you'd expect. I've renamed some of the variables to hopefully make it a little more understandable. It wasn't really clear from the question if second is a member variable but I believe it needs to be to maintain state across refreshes.

private MouseState _previousMouseState;
private bool _second;

protected override void Update(GameTime gameTime)
{
var mouseState = Mouse.GetState();

if(mouseState.LeftButton == ButtonState.Released && _previousMouseState.LeftButton == ButtonState.Pressed)
{
_second = !_second;
}

_previousMouseState = mouseState;

base.Update(gameTime);
}


Since you're essentially just flipping a flag the if statement in the middle can be reduced to one line. Either way should work though.

• Thanks, it works now. My old_Mouse update was in another class so it was a few milliseconds to slow so the variable could change a few times... Mar 31 '16 at 15:18