-
Hello, my problem is very weird, I want to perform a simple "double click" (but triggered when I press the mouse button, not when I release it)
Problem: The PollEvent is not detecting me the second MouseButtonPressed (for a double click)
It is weird because it detects the second MouseButtonReleased, but not the MouseButtonPressed :S
Code:
public void DispatchEvents
() { Event e
; while (PollEvent
(out e
)) // PollEvent Location { CallEventHandler
(e
); } } void CallEventHandler
(Event e
) { switch (e
.Type) { case EventType
.MouseButtonPressed: // Doesn't detect double click if (MouseButtonPressed
!= null) MouseButtonPressed
(this,
new MouseButtonEventArgs
(e
.MouseButton)); break; case EventType
.MouseButtonReleased: // Does detect doble click if (MouseButtonReleased
!= null) MouseButtonReleased
(this,
new MouseButtonEventArgs
(e
.MouseButton)); break; } }
Thanks!!
-
At first I'd suggest you don't use using sf! Because it will make your code look really weired and confusing to other people...
Second I have no idea what class MouseButtonPressed is and what MouseButtonPressed(this, new MouseButtonEventArgs(e.MouseButton)); should do.
I would do something like (untested):
unsigned int MouseButtonPressed = 0;
//...
if(event.type == sf::Event::MouseButtonPressed)
{
if(MouseButtonPressed < 2)
++MouseButtonPressed;
else
{
MouseButtonPressed = 0;
// Handle Double (or more) Click Event
}
}
else if(event.type == sf::Event::MouseButtonReleased)
{
MouseButtonPressed = 0;
}
-
Thanks for your reply, my code looks weird because it is in C# (I dont like it too)
I have changed it to see if it is clearer:
(Note that the problem is in PollEvent, it doesnt send me the second button pressed)
public void DispatchEvents()
{
Event e;
while (PollEvent(out e)) // PollEvent Location
{
if(e.type == EvenType.MouseButtonPressed)
{
if(MouseButtonPressed < 2)
++MouseButtonPressed; // Doesnt work, when I double click, the PollEvent seems to "eat" a click
else
{
MouseButtonPressed = 0;
// Handle Double (or more) Click Event
}
}
}
}
-
What OS and revision of SFML 2 are you using?
-
Oh wait no, I made that wrong. Because for a double click you'll have to press, release and press. With my code it will get reset when ever you release the button.
unsigned int MouseButtonPressed = 0;
//...
if(event.type == sf::Event::MouseButtonPressed)
{
if(MouseButtonPressed < 2)
++MouseButtonPressed;
else
{
MouseButtonPressed = 0;
// Handle Double (or more) Click Event
}
}
else if(event.type == sf::Event::MouseButtonReleased && MouseButtonPressed >= 2)
{
MouseButtonPressed = 0;
}
But keep in mind you won't be able to handle single clicks anymore with that code and the user will be able to make double clicks with an unlimited pause in between.
I guess a better way would be to measure the time difference between two clicks with a sf::Clock. Whenever someone clicks check if the difference is not too big and then restart the clock.
-
Lurent:
I am not sure, because I have downloaded them with an engine (the sfml dll date is November 8th 2011 and the function hooked is PollEvent (not pollEvent))
However, I have downloaded the latest DLL and hooked it directly to pollEvent without luck.
The OS is Win7 x64
The engine is coded in C#, but it uses the csfml libs (not the sfml net). Could it make some trouble? The weird thing it works perfect for button release...
eXpl0it3r:
I am not concerned with the double click function right now, the problem I have is the event is not catched by PollEvent for some very weird reason.
Thanks guys, I have been several days trying to fix this issue and I am getting crazy
-
Works perfectly for me with latest SFML.Net on Windows 7 x64.
-
Thanks for the reply, I am coding in C#, but I have the libraries directly imported from the "csfml" using:
[DllImport("csfml-window-2", CallingConvention = CallingConvention.Cdecl)]
[SuppressUnmanagedCodeSecurity]
static extern bool sfWindow_PollEvent(IntPtr This, out Event Evt);
I will try anyway on other computers to see if the problem is my OS or graphic card
-
Since it works with SFML.Net and not with the engine's own binding, there's most likely an error in it. By the way, why don't they use SFML.Net?
I will try anyway on other computers to see if the problem is my OS or graphic card
Graphics card? No :)
OS? I tried with the same OS and it worked.
-
Yes I think the problem may be there, I will try to replace the libraries.
The doesnt use the sfml-net because when they started to build the engine, the sfml-net were not created. So to exchange the libs now is doesnt worth the effort.
However, I cannot do anything without the f***ing double click!! And I want it when I press the second "MouseButtonPressed" not the common double click: the second "MouseButtonReleased"
Thanks for your replies
-
I realized the PollEvent is being overriden by the RenderWindow class, so it is calling the PollEvent from "csfml-graphics-2.dll" (Not window dll)
I am trying to use the latest sfml graphics lib to solve it.
Sorry for the previous unaccurate info