Допустим мы указали с помощью sf::IntRect некую область, а как сделать проверку клика мыши внутри этой области?
Код: https://ideone.com/y174VB
Другие языки программирования и технологии
Нужна помощь с функцией SFML
C++Выделить код
#include "stdafx.h"
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace sf;
float currentFrame = 0; //в этой переменной мы сохраняем номер кадра
int main() {
bool isMove = false;//переменная для щелчка мыши по спрайту
float dX = 0;//корректировка нажатия по х
float dY = 0;//по у
RenderWindow window(VideoMode(640, 480), "FORK PROJECT");
Texture texture;
texture.loadFromFile("C:/111/z1.jpg");
Sprite sprite;
sprite.setTexture(texture);
sprite.setPosition(300, 50);
sprite.setTextureRect(IntRect(1, 1, 200, 200)); // нулевая текстура старта
{
while (window.isOpen()) {
sf::Vector2i localPosition = Mouse::getPosition(window);//заносим в вектор координаты мыши относительно окна (х, у)
Vector2i pixelPos = Mouse::getPosition(window);//забираем коорд курсора
Vector2f pos = window.mapPixelToCoords(pixelPos);//переводим их в игровые (уходим от коорд окна)
std::cout << pixelPos.x << "\n";//смотрим на координату Х позиции курсора в консоли (она не будет больше ширины окна)
std::cout << pos.x << "\n";//смотрим на Х, которая преобразовалась в мировые координаты
// std::cout << "local Position mouse " << localPosition.x << "\n";// как себя ведет позиция курсора Х
Event event;
while (window.pollEvent(event)) {
if (event.type == Event::Closed)
window.close();
if (event.type == Event::MouseButtonPressed)//если нажата клавиша мыши
if (event.key.code == Mouse::Left)//а именно левая
// if (p.sprite.getGlobalBounds().contains(pos.x, pos.y))//и при этом координата курсора попадает в спрайт
{
std::cout << "isClicked!\n";//выводим в консоль сообщение об этом
// dX = pos.x - p.sprite.getPosition().x;//делаем разность между позицией курсора и спрайта. для корректировки нажатия
// dY = pos.y - p.sprite.getPosition().y;//тоже самое по игреку
// isMove = true;//можем двигать спрайт
if (event.type == Event::MouseButtonReleased)//если отпустили клавишу
if (event.key.code == Mouse::Left) //а именно левую
isMove = false; //то не можем двигать спрайт
// p.sprite.setColor(Color::White);//и даем ему прежний цвет
}
}
if (Keyboard::isKeyPressed(Keyboard::Up)) {
sprite.move(0, -0.1);
}
if (Keyboard::isKeyPressed(Keyboard::Down)) {
sprite.move(0, 0.1);
}
//
window.clear(Color::White);
window.draw(sprite);
window.draw(sprite);
window.display();
}
return 0;
}
}
#include "stdafx.h"
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace sf;
float currentFrame = 0; //в этой переменной мы сохраняем номер кадра
int main() {
bool isMove = false;//переменная для щелчка мыши по спрайту
float dX = 0;//корректировка нажатия по х
float dY = 0;//по у
RenderWindow window(VideoMode(640, 480), "FORK PROJECT");
Texture texture;
texture.loadFromFile("C:/111/z1.jpg");
Sprite sprite;
sprite.setTexture(texture);
sprite.setPosition(300, 50);
sprite.setTextureRect(IntRect(1, 1, 200, 200)); // нулевая текстура старта
{
while (window.isOpen()) {
sf::Vector2i localPosition = Mouse::getPosition(window);//заносим в вектор координаты мыши относительно окна (х, у)
Vector2i pixelPos = Mouse::getPosition(window);//забираем коорд курсора
Vector2f pos = window.mapPixelToCoords(pixelPos);//переводим их в игровые (уходим от коорд окна)
std::cout << pixelPos.x << "\n";//смотрим на координату Х позиции курсора в консоли (она не будет больше ширины окна)
std::cout << pos.x << "\n";//смотрим на Х, которая преобразовалась в мировые координаты
// std::cout << "local Position mouse " << localPosition.x << "\n";// как себя ведет позиция курсора Х
Event event;
while (window.pollEvent(event)) {
if (event.type == Event::Closed)
window.close();
if (event.type == Event::MouseButtonPressed)//если нажата клавиша мыши
if (event.key.code == Mouse::Left)//а именно левая
// if (p.sprite.getGlobalBounds().contains(pos.x, pos.y))//и при этом координата курсора попадает в спрайт
{
std::cout << "isClicked!\n";//выводим в консоль сообщение об этом
// dX = pos.x - p.sprite.getPosition().x;//делаем разность между позицией курсора и спрайта. для корректировки нажатия
// dY = pos.y - p.sprite.getPosition().y;//тоже самое по игреку
// isMove = true;//можем двигать спрайт
if (event.type == Event::MouseButtonReleased)//если отпустили клавишу
if (event.key.code == Mouse::Left) //а именно левую
isMove = false; //то не можем двигать спрайт
// p.sprite.setColor(Color::White);//и даем ему прежний цвет
}
}
if (Keyboard::isKeyPressed(Keyboard::Up)) {
sprite.move(0, -0.1);
}
if (Keyboard::isKeyPressed(Keyboard::Down)) {
sprite.move(0, 0.1);
}
//
window.clear(Color::White);
window.draw(sprite);
window.draw(sprite);
window.display();
}
return 0;
}
}
Похожие вопросы
- Нужна помощь по информатике.
- Нужна помощь с паскалем!
- Программисты,нужна помощь,пожалуйста Для вас легко
- С помощью какой функции можно ВЫРЕЗАТЬ часть текста из ячейки в ЭКСЕЛЕ ?
- MS Dos, можно ли с помощью его функций найти на компе файлы одного типа? Музыку, картинки, видео - хочу рассортировать.
- как в С++ В ООП перегрузить с помощью дружественных функций && и ||?
- Логика. Нужна помощь.
- Нужна помощь
- Информатика!Нужна помощь!если можно,с объяснением.
- Пожалуйста, очень нужна помощь с Pascal
Как сравнить данные вектора с IntRect?