Созданные ответы форума
-
АвторСообщения
-
Нет. Просто нет.
Во-первых ради разнообразия запустите. Это крайне интересное зрелище.(просто скачайте пару файлов РАЗНОГО размера)
Во-вторых а без массива ВООБЩЕ никак? Это довольно неудобный инструмент. Да он помогает если необходимо загрузить ОДНОВРЕМЕННО группу данных, но не здесь.
В любом случае спасибо. Теперь либо буду ломать голову над тем как сделать код человечным, или перейду на другую графическую среду, или заброшу это дело.
Выражение pic должно иметь тип класса.
Да но он всё равно жалуется на pic[i] – отсутствует оператор “[]” соответствующий этим операндам Типы операндов sf::Image [int].
C++12345Image pic;int i = 1;int n = 4; for (int i = 1; i < n; i++)pic[i].loadFromFile("img/" + std::to_string((int)i + 1) + ".png");Vector2u size = pic.getSize();P.S. С каждой решенной проблемой чувствую себя всё большим идиотом неспособным найти ответ в решении схожих проблем(форумы читаю, но конкретно о SFML таких проблем не нахожу).
Я всё равно не вижу особого смысла в массиве. Что с ним что без него реакции на клавиатуру нету.C++12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364#include <SFML/Graphics.hpp>#include<Windows.h>#include <iostream>#include<sstream>using namespace sf;int main(){RenderWindow window(VideoMode::getDesktopMode(), "SFML Test", Style::Fullscreen);Image pic;int i = 1;pic.loadFromFile("img/" + std::to_string((int)i) + ".png");Vector2u size = pic.getSize();Texture picfon;picfon.loadFromImage(pic);Sprite fon;fon.setTexture(picfon);while (window.isOpen()){sf::Event event;while (window.pollEvent(event)){if (event.type == sf::Event::Closed ||(event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::Escape))window.close();}if (Keyboard::isKeyPressed(Keyboard::Left)){fon.setScale(static_cast<float>(window.getSize().x) / size.x,static_cast<float>(window.getSize().y) / size.y);}if (Keyboard::isKeyPressed(Keyboard::Right)){fon.setScale(1, 1);}if (Keyboard::isKeyPressed(Keyboard::Up)){float xsize = (static_cast<float>(window.getSize().x) / size.x);fon.setScale(xsize , xsize);}if (Keyboard::isKeyPressed(Keyboard::Down)){float ysize = (static_cast<float>(window.getSize().y) / size.y);fon.setScale(ysize , ysize);}if (Keyboard::isKeyPressed(Keyboard::Return)){int i = i + 1;pic.loadFromFile("img/" + std::to_string((int)i) + ".png");}window.clear(Color::White);window.draw(fon);window.display();}return 0;}Не говоря уже о том что жалобы на не инициализированную локальную переменную продолжаются.
Я явного где-то сильно напортачил.
Осталась последняя загадка на миллион:
Как используя массив и клавиатуру заставить менять текущий элемент массива на другой(выведено на экран 2.png после нажатия if (Keyboard::isKeyPressed(Keyboard::Return) выводится 3.png)?Даже если убрать массив(при малом числе файлов от него проку мало, но всё равно полезен)
C++12int i = 1;pic.loadFromFile("img/" + std::to_string((int)i + 1) + ".png");То всё равно компилятор жалуется на то что i(ниже) не инициализированная локальная переменная.
C++12345if (Keyboard::isKeyPressed(Keyboard::Return)){int i = i + 1;pic.loadFromFile("img/" + std::to_string((int)i + 1) + ".png");}Спасибо. Пару моментов:
C++1Image pic; int n = 2; for (int i = 0; i < n; i++) loadFromFile(fly[i], "img/" + std::to_string((int)i + 1) + ".png");Идентификатор loadFromFile не определен, fly тоже самое, n сразу исправил.
Изменил:
C++1Image pic; int n = 2; for (int i = 0; i < n; i++) pic.loadFromFile(fly[i], "img/" + std::to_string((int)i + 1) + ".png");fly остался прежним, “img/” ошибка слишком много аргументов в вызове функции.
Чтобы такого сделать с fly не получается допереть.
10.02.2016 в 19:54 в ответ на: Трансформация изображения (а так же его адаптивность под разные разрешения) #3023+2Heisenberg, MatrixDeity и RazorNd СПАСИБО большое.
Во-первых заменил const Vector2f defaultResolution = Vector2f(800.0F, 600.0F); на более удобный способ получения чисел для работы float xsize = (static_cast<float>(window.getSize().x) / size.x); fon.setScale(xsize , xsize); Во-вторых теперь это пременимо к ЛЮБЫМ изображениям.
Осталось разобраться как создать массив из изображений чтобы при переключении они сменялись циклично(сохраняя настройки увеличения) и решить головную боль с центрированием. Пробовал fon.setPosition(); но он не особо удобен.
Хотя хорошо что уже работает увеличение до высоты, до ширины, до полного экрана и возврат к нормальному размеру.10.02.2016 в 18:28 в ответ на: Трансформация изображения (а так же его адаптивность под разные разрешения) #3018size.x и size.y “выражение перед скобками вероятного вызова должно иметь тип функции (pointer-to-)” Не как не врублюсь как это исправить?
C++1234Image image;image.loadFromFile("img/015_cg02_02.png");Vector2u size = image.getSize();int sizeX = size.x(), sizeY = size.y();10.02.2016 в 09:29 в ответ на: Трансформация изображения (а так же его адаптивность под разные разрешения) #3014Как получить размеры изображения?(не слепой сам вижу но как заставить C++/SFML записать размеры любого произвольно изображения – не знаю)
Вот у нас есть image.png размером 600×400. Нам нужно присвоить xsize и ysize соответственно длину и ширину изображения(в дальнейшем изображений будет очень много и xsize = 600; ysize = 400; будет слишком долго вводить(прим. к тому же в ни одна программа для просмотра изображений и изменения их не знает заранее размера изображений))
08.02.2016 в 22:43 в ответ на: Трансформация изображения (а так же его адаптивность под разные разрешения) #2977Можно ли ограничить setScale?(C++ 2013 SFML)
К примеру не больше размера экрана или сохранение пропорций размера относительно дефолтного разрешения(пример дефолт 800×600 изображение 20×20 > при 1600×900 изображение 40×30).
05.02.2016 в 21:30 в ответ на: Трансформация изображения (а так же его адаптивность под разные разрешения) #2924А вторую часть кода куда вставлять?
Добавлять новые элементы .cpp или .h и в них вставлять или что-то другое?
Просто он не может найти “Resolution.h”(или открыть) если помещать всё в один элемент. Или его нужно отдельно создать?05.02.2016 в 20:22 в ответ на: Трансформация изображения (а так же его адаптивность под разные разрешения) #2921Я не совсем понял как тут объяснили, поэтому спрошу.
Разрешение окна и формат в полноэкранном режиме устанавливается пользователем из имеющихся вариантов(800×600, 1024×768 и т.д.).
Как сделать чтобы изображение растягивалось до столкновения с одним из краев окна(и на весь экран)? (Что-то в духе функции “Fit” в настроках программы “CDisplay”.)
Как сделать так чтобы он растянулся до столкновения с другим объектом?
И последний нубский вопрос: как отцентрировать изображение?
P.S. В некоторых программах при увеличении разрешения даже кнопка выхода уходила за край монитора. Как этого избежать? (C++ 2013 на всякий случай)
-
АвторСообщения