Урок 18 SFML рух спрайту в кліку миші, kychka-pc, SFML

Рух спрайту на кліку часто застосовується в іграх, таких як стратегії або RPG. У цьому уроці розглянемо реалізацію такого руху.

Буде трохи аналітичної геометрії, але тут все просто, раджу сісти та розібратися

Для створення руху на кліку необхідно мати вектор, який бере свій початок у координатах нашого персонажа, а кінець – у точці кліка курсора.

Додамо в клас гравця змінну isMoved і isClicked:

Ініціалізували їх у конструкторі:

Змінна isMove буде відповідати за стан руху персонажа, тобто поки він іде isMove=true, інакше = false. Змінна isClicked дозволить гравцю тицьнути по персонажу і сказати, куди йому треба йти. Якщо він не тицьне і не вибере його, то й іти не зможе. Все як у стратегіях!

Тепер оголосимо змінні в int main()

У нас вже є з минулого уроку ігрові координати курсору, перевірте, щоб вони залишилися:

Тепер у циклі подій запиляємо лівий тик миші, який відповідатиме за вибір об'єкта.

Якщо тицьнули ліву клавішу і при цьому потрапили курсором на наш спрайт гравця, то фарбуємо спрайт в зелений колір (наприклад так гравець зрозуміє, що тицьнув і об'єкт готовий до дій) і змінюємо змінну isSelect на значення true.

Далі перед кінцем циклу подій реалізуємо правий клік, який можливий, якщо ми вибрали об'єкт. Цей клік зробить змінну isMove true, запише координати кліка курсора, поверне спрайту колишній колір, скаже, що об'єкт вже не вибраний:

Після кінця циклу подій та його закриття напишемо код, що реалізує рух героя:

Ось ще трохи для розуміння картини:

урок
sfml lesson 18

На скріншоті у мене замість героя стрільця тому, що мій спрайткотика не годиться для стратегій, а так само в наступному уроці ми повертатимемо спрайт у бік місця його напряму руху (а також курсора), тому стрілка точніше вкаже цей напрямок.

спрайту
рух по кліку миші

Ось вам весела картинка на тему))

урок

Хотілося б зазначити, що б забирали координати курсору постійно, а краще це робити на кліку миші, тобто при кліку миші перемикати прапор, який зніме координати, спробуйте реалізувати це в такій умові.