SFML окно внутри окна виндовс на С++

В этой теме 5 ответов, 2 участника, последнее обновление  KindRedSand 6 мес., 2 нед. назад.

Просмотр 6 сообщений - с 1 по 6 (из 6 всего)
  • Автор
    Сообщения
  • #4552

    Axel
    Участник
    Сообщений:2

    Зарегистрирован:
    03.04.2017

    Репутация:0

    Всем привет!

    Мне интересно, возможно ли впихнуть окно SFML во внутрь окна WindowsForm(или какой нибудь аналог для C++)?

    Я написал для своей игры, редактор тайл мапы. Задумка была такая, есть палитра с загружаемого спрайта, от куда копируются тайлы, а потом ими рисуем на карте. Хотелось бы это сделать таким образом, что бы сама карта была в одно окне, как вьюпорт в каком нить фотошопе, а палитра была как панель с боку. Но из за не хватки знаний SFML, С++ и программирования  в целом, мне пришлось немного схитрить с этим. И я создал эту палитру как один большой спрайт.

    Пример1
    Еще набросал в фотшопе пример того какой я бы хотел видеть свою программу
    Пример2

    Вложения:
    You must be logged in to view attached files.
    #4555

    KindRedSand
    Участник
    Сообщений:71

    Зарегистрирован:
    05.04.2017

    Репутация:28

    Я всё же не очень понял твою задумку. Если ты хочешь отдельно плавающее окно – используй второй RenderWindow в главном цикле. Если же ты хочешь всё распологать в одном окне – используй несколько View в каждом указываея viewport и делая отрисовку в окне с использованием каждого View.
    Учти что тут задаётся множитель от 0 до 1 относительно размера окна.
    Кнопочки на sf::Text особо проблем сделать не должно предоставить(text.getGlobalBounds().contain(Vector2f(Позиция курсора))).

    #4558

    Axel
    Участник
    Сообщений:2

    Зарегистрирован:
    03.04.2017

    Репутация:0

    я хотел сделать что бы окно SFML было внутри windows Form, со всеми его кнопочками, чекбоксами и т.п. Но я не нашел примеров как связать SFML с ним и нашел альтернативу в виде QT))) Даже интегрировал его с Visual Studio, а то уж очень к ней привык)

    Короче говоря, я почти сделал свою задумку, но программирования оно такое… решишь одну проблему и тут же появится другая(

    Так что пока удалось просто запустить самую простенькую сцену
    Пример

    а мой предыдущий проект, который я показывал выше, сюда встроить мне не получается((( так как там я не много намудрил с некоторыми переменными и функциями… тоисть у меня там есть переменные, которые обьявлены вне функций и классов, это сделано для того, чтобы разные классы и функии в других хедерах имели к ним доступ. По другому я пока не умею, а QT проект ругается на такое, говоря что такие переменные уже определены, хотя я уже по всякому их переименовывал и даже создавал для них пространство имен.
    впр

    #4559

    KindRedSand
    Участник
    Сообщений:71

    Зарегистрирован:
    05.04.2017

    Репутация:28

    Можешь использовать глобальные или статические переменные.
    Для глобальной переменной:
    В main.cpp или где-то ещё определяешь int *имя*; Где нужно получить к ней доступ: extern int *имя*;
    Если нужен доступ к методу делаеться аналогично void foo(int Num) {} И где нужно получить доступ: extern void foo(int Num);
    Кстати, если предполагаеться что переменная в вызове метода может быть не переданна(void foo2(int Num = 0, String str = “”)) то значение по умолчанию должно указываться в extern void foo2(int Num = 0, String str = “”); а не в реализации.
    Статические просто определяются как static и обращение идёт как Class::переменная/метод.
    А вобще лучше сделать класс или структуру которые будут содержать в себе эти вещи и пихнуть их реализацию в .cpp

    #4561

    Axel
    Участник
    Сообщений:2

    Зарегистрирован:
    03.04.2017

    Репутация:0

    Спасибо большое за ответ)))
    Я как раз подумывал о последнем варианте, пока не увидел здесь ответ.

    Кстати пока писал это сообщения то успел попробовать эти варианты. И на глобальные переменные он также ругается как и на обычные, а со статиками норм.

    Так вот получилось, что программирования я учил практически по примерам SFML, разве что самые основы, типа переменные и что это такое, я узнал с видео уроков по С++. И не успев дойти к классам я наткнулся на SFML и все остальное я учил уже по его примерам. Ну и если натыкался на какие то проблемы то сразу их гуглил в итоге знаю мало и код… ну там ваше ппц. Например проект qt сразу разделил классы на cpp и hpp, из-за чего я просто был в замешательстве, что и куда… а я всегда привык делать, так называемые встроенные классы и все гордить в 1 hpр. Тоисть 1 main.cpp и все остальное хедеры с их классами. Такой подход видимо нубский, но мне реально не удобно переписывать что то сразу в 2 файлах и постоянно играться с прототипами и их реализациями. По этому следуя своему кодексу нуба я взял и переделал сpp и hpp в 1 хедер, что по сути результат не изменило, но зато теперь у меня 2 хедера и я знаю как они устроены.

    #4562

    KindRedSand
    Участник
    Сообщений:71

    Зарегистрирован:
    05.04.2017

    Репутация:28

    Ну в хидере всегда висит обьявление, в cpp реализация. Если тебе нужно хранить в классе какой либо другой класс или передовать его в метод используй forward declaration(Т.е. сразу после include выписать используемые классы но header содержащий этот класс подключить в cpp файле!)

    Если работаешь из студии можешь использовать быстрые действия для генерации cpp файла.
    Ну и на досуге стоит почитать это, да и любую другую литературу по плюсам. Хотя по сути я плюсы изучал по аналогии с тобой, вот только сам вопросы не кидал на форумы, а учился на чужих ошибках :)

Просмотр 6 сообщений - с 1 по 6 (из 6 всего)

Для ответа в этой теме необходимо авторизоваться.