SFML и C++ Уроки \ Разработка игр › Форумы › SFML Graphics › Организация инвентаря
В этой теме 8 ответов, 4 участника, последнее обновление ZloyEwok 7 года/лет, 6 мес. назад.
-
АвторСообщения
-
Принцип работы по типу меню из урока 31
C++1234567891011121314151617181920212223242526272829303132333435363738394041void inventory(RenderWindow &window){if (invent){//cout << x << " " << y;BagFrame.setPosition(x, y);ItemFrame.setPosition(x - 100, y - 70);ItemFrame.setColor(Color::White);if (IntRect(x-100, y-70, 40, 40).contains((Mouse::getPosition(window)))){er = 0;ItemFrame.setColor(Color::Blue);}if (IntRect(x - 100, y - 30, 40, 40).contains((Mouse::getPosition(window)))){er = 1;ItemFrame.setColor(Color::Red);}if (IntRect(x - 100, y + 10, 40, 40).contains((Mouse::getPosition(window)))){er = 2;ItemFrame.setColor(Color::Yellow);}if (IntRect(x - 100, y + 50, 40, 40).contains((Mouse::getPosition(window)))){er = 3;ItemFrame.setColor(Color::Green);}if (IntRect(x - 100, y + 90, 40, 40).contains((Mouse::getPosition(window)))){er = 4;ItemFrame.setColor(Color::Black);}if (Mouse::isButtonPressed(Mouse::Right)){sprite.setTextureRect(IntRect(0, er * 40, w, h));}window.draw(BagFrame);window.draw(ItemFrame);}}по какой-то причине, не срабатывают условия на пересечение прямоугольника и курсора
Что ж, начнём с элементарного, прописал ли ты эту функцию в main? т.е. в бесконечном цикле. Далее.
Не знаю как у других, но у меня, при ручном расширении окна начинает криво работать пересечение курсора с прямоугольником, т.к. при изменении окна меняются координаты.
и ещё, ты в функции рисуешь свой инвентарь, и чтобы он был виден, его надо рисовать ПОВЕРХ всех остальных рисунков. Т.е. эту функцию ты должен прописать прямо перед window.display(); чтобы вся остальная рисовка была сверху этой функции.
window.draw(karta);
inventory(не знаю какие параметры сюда передать надо);
window.display();
Пока это всё, что я могу предположить
Извините, меня немного унесло в другую степь, ну может быть кому-нибудь да пригодится…
Да, действительно унесло), и нет, с описанными вами деталями проблем нет
По сути, функция должна быть в цикле. Вернее ее вызов
Функция рабочая, не работают конкретно условия
Может вам нужно перевести координаты мыши?
C++12Vector2i pixelPos = Mouse::getPosition(window);//забираем коорд курсораVector2f pos = window.mapPixelToCoords(pixelPos);//переводим их в игровые (уходим от коорд окна)Для функции .contain это не обязательно
C++12Vector2i pixelPos = Mouse::getPosition(window);Vector2f pos = window.mapPixelToCoords(pixelPos);Помогло
-
АвторСообщения
Для ответа в этой теме необходимо авторизоваться.