Позицията на мишката се променя при щракане / натискане на клавиши?

И така, в момента разработвам първата си игра (и C++ приложение) като хоби, но се натъкнах на проблем и не съм сигурен как да го заобиколя. Всяка помощ, разбира се, се оценява.

Моят проблем е следния:

Всеки път, когато щракна или натисна клавиш на клавиатурата, координатите на мишката скачат до наистина странни стойности и след това се връщат към нормалното след секунда. Това обърква моите векторни изчисления за траектории на куршуми и т.н.

Пример: http://puu.sh/3xjFq.jpg

Както можете да видите в моя прозорец на конзолата, координатата Y скача от правилната стойност (628) до (-858993460), след това до (65536), след това отново до правилната стойност.

Кодът, който използвам за извличане на координатите на мишката:

cout << "X: " << event.mouseMove.x << " Y: " << event.mouseMove.y << endl;

Това също е същият код, който използвам за извличане на координати на мишката за изчисления.

Предполагам, че източникът на проблема ми е самият SFML и начинът, по който работи. Каква би била алтернативата за извличане на координати на мишката?

Обърнете внимание, че все още съм много нов в това (започна миналата седмица), така че се опитайте да поддържате всичко възможно най-просто.

Всяка помощ се оценява, благодаря!


person user2558804    schedule 07.07.2013    source източник
comment
Това е код за отпечатване на координатите на мишката. Къде е целият код за извличане на координатите?   -  person Captain Obvlious    schedule 08.07.2013


Отговори (1)


Събитията се съхраняват в обединение в SFML. Ако не знаете как работят синдикатите, определено трябва да прочетете за това (wikipedia). С една дума, различните променливи споделят едно и също място в паметта. Това очевидно ви дава странни стойности, когато ги интерпретирате с грешен тип.

Когато пишете:

event.mouseMove.x/y

стойността на членовете x или y са валидни само ако събитието, което разглеждате, е sf::Event::MouseMoved. Ако искате да проверите координатите на мишката при натискане на бутон (т.е. събитие от тип sf::Event::MouseButtonPressed), трябва да използвате

event.mouseButton.x/y
person teh internets is made of catz    schedule 07.07.2013
comment
event.mouseButton.x и event.mouseButton.y обаче не е валиден SFML код. - person user2558804; 08.07.2013
comment
@user2558804 Така е, проверете този урок: sfml-dev.org/tutorials /2.0/window-events.php - person teh internets is made of catz; 08.07.2013
comment
А, мисля, че сега го разбирам. Но какво да правя с натисканията на клавиши? Няма ли друг начин за получаване на позицията на мишката, без да се прибягва до метода на обединение, който SFML използва? - person user2558804; 08.07.2013
comment
@user2558804 Класическият начин е да имате превключвател за разграничаване на типа събитие, както в урока (първи примерен код). Можете също да получите действителното състояние на мишката по този начин ( sfml -dev.org/tutorials/2.0/window-inputs.php#mouse ). IMHO трябва да прочетете тези 2 урока, тъй като те са основни неща, които трябва да бъдат добре разбрани. - person teh internets is made of catz; 08.07.2013