Форум программистов, компьютерный форум, киберфорум
Программирование игр
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.94/18: Рейтинг темы: голосов - 18, средняя оценка - 4.94
Угадываю функции...
2 / 2 / 0
Регистрация: 18.11.2019
Сообщений: 77
1

Какой движок лучше выбрать

18.06.2020, 08:23. Просмотров 3450. Ответов 53
Метки нет (Все метки)

Здравствуйте. Имеется древний ноут с windows 7. Юнити на нём лагает (да и учить шарп как то не хочется), Unreal Engine тоже. Посоветуете какой-нибудь современный малотребовательный игровой движок для C++? А то кодить на билдере 2009 года мне уже как-то стыдно
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.06.2020, 08:23
Ответы с готовыми решениями:

Какой движок лучше
Я хочу создать 3д игру в стиле action, нашел два движка Ogre SDK и Irrlicht Engine SDK. Подскажите...

Какой движок выбрать 2d?
Хочу подучить язык java и возможно выучить ещё парочку типа lua или python. Есть заодно желание...

Какой движок выбрать?
Какой движок выбрать для RST стратегии? Желательно на C#, но можно и на другом.

Подскажите, какой игровой движок выбрать
Посоветуйте, какой движок можно выбрать, если я хочу сделать проект по типу: Star Wars: Knights of...

53
4176 / 2282 / 387
Регистрация: 05.10.2013
Сообщений: 6,385
Записей в блоге: 177
27.06.2020, 19:16 41
Цитата Сообщение от alecss131 Посмотреть сообщение
Только для геймдева учить движки и программирование не достаточно, я бы сказал что это треть максимум (или половина если свой движок), для 2д игр надо уметь рисовать либо находить картинки
Это смотря какие игры, какие цели у программиста. Если у вас не маленький город, то наверняка вы найдёт вакансии, где игровая контора ищет программистов. К вам будут требования только как к программисту. Если контора делает многопользовательские игры, то в команде могут быть программисты с разными специализациями. Один может на геймплее специализироваться, другой на сети и базе данных, четвёртый на написании шейдеров. Либо один программист может это сочетать. Знания и навыки использования API движка как Unity могут быть достаточными для работы в команде. Я хочу писать сетевые игры, но я могу использовать временные бесплатные картинки и временные музыкальные файлы. Сейчас интернет завален бесплатными картинками для игр, 3D моделями, музыкой и звуками. Программист легко может в любой момент заменить звуки, музыку, картинки и 3D модели. Если есть у программиста хобби: писать музыку, моделировать, рисовать, создавать спайтовые анимации или создавать скелетные анимации, то пусть этим занимается, если ему нравится. А можно, действительно, найти друзей среди художников, моделлеров, аниматоров, композиторов и вместе делать игры, пусть ради хобби сначала. Вариантов огромное количество. Кому-то нравится в офисе работать в команде, делать мобильные игры. За зарплату можно найти вакансию программиста на Unity в любом более или менее крупном городе. Можно удалённо найти. При знании английском можно найти зарубежом удалённую работу - вакансий полно. Либо искать заказы, как фрилансер и специалист в движке. Можно свои небольшие игры делать, встраивать в них рекламу, брать бесплатную графику и звуки, либо потом заказывать, если будут накопления и специфические потребности в музыке или арте.

Цитата Сообщение от alecss131 Посмотреть сообщение
Unreal вечит не много, в пределах 16гб, а качать не более 8
Для моего ноута это очень много. Сейчас только самое необходимое есть на ноуте. Я периодически курсы отгружаю на облачные хранилища: Mediafire, Google Drive, One Drive, Yandex Disk и т.д. В основном жёсткий забит курсами на английском по разным тематикам для самообразования в работе.

Цитата Сообщение от alecss131 Посмотреть сообщение
Он вроде требует студию, с другими не знаю.
Я удалил Visual Studio 2019, потому что она занимала больше 10 ГБайт. Вместо неё использую легковесный редактор кода VSCode. Использую VSCode для C#/Unity, Python, TypeScript/JavaScript/HTML/CSS. Для C++ использую QtCreator.

Цитата Сообщение от alecss131 Посмотреть сообщение
А то что требовательный это да, помню 4.20 бегал куда быстрее чем 4.25
Я пробовал Unreal в 2015 году. Не помню, какая тогда была версию. У меня доходило то того, что ноут перезагружался от перегрева. Он не мог спокойно работать - сильно шумел. Unity работает тихо. Такая же ситуация была с 3DsMax, Maya и Photoshop, поэтому я перешёл на изучение Blender, GIMP и Inkscape. Вместо Unreal пробовал CryEngine 5 - ситуация такая же. Просто нужно накопить на мощный ноут. Я именно ноут хочу, чтобы быть перемещаться с ним.

Цитата Сообщение от alecss131 Посмотреть сообщение
В последних версиях вырезали сборку в html, можно добавить но надо собирать движок самому из комьюнити версии.
WebAssembly в целом сыроват ещё. Я читал, что на мобильных плохо работает. Команда разработчиков Unity вообще решила поддерживать только WebGL на desktop-браузеров, а от мобильных пока отказалась. Для браузерных игр на WebGL я выбрал Phaser (для 2D) и Babylon.js (3D), потому что эти они поддерживают TypeScript, который я стараюсь использовать вместо JavaScript, потому что мне не нравится программировать на JS. Я собрал недавно пример для desktop-браузеров на Unity WebGL в котором можно крутить кубик: https://bit.ly/2B6wqWo Весит целых 5 МБайт. Зато запускается в один клик, не нужно качать архив, разархивировать. Поворачивается кубик с помощью клавиш стрелок на клавиатуре:

0
4176 / 2282 / 387
Регистрация: 05.10.2013
Сообщений: 6,385
Записей в блоге: 177
28.06.2020, 11:19 42
Цитата Сообщение от MiKITA17 Посмотреть сообщение
да и учить шарп как то не хочется
Есть такая шутка, что C# - это следующее поколение C++, то есть ещё два плюса добавили. В этой шутке есть доля правды.

Название: c++++(1).jpg
Просмотров: 43

Размер: 5.7 Кб

Название: c++++.jpg
Просмотров: 43

Размер: 4.0 Кб

Я когда стал изучать C#, у меня такое ощущение и было, что C# - это усовершенствованный C++. Столько очень удобных штук добавилось к C++. Изучайте одновременно C++ и C# через написание простых игр. Научитесь писать простые - будут открываться пути к более сложным. Учиться определённо нужно на простых известных играх. Почитайте эти короткие статьи, особенно, статью "Make small Games": https://noobtuts.com/articles Руки нужно набивать на простых игра. Это я и к себе тоже обращаюсь, потому что я сам часто это забывал и сейчас забываю. День проходит, а вклад в конкретную игру не был сделал. Надо писать 2D-игры на SFML С++ и 2D/3D игры на Unity C#. По SFML я уже давал ссылку, какие игры можно взять за стартовые. А это ссылка на текстовые туториалы на простом английском, как делать известные игры с простой графикой на Unity: https://noobtuts.com/unity Нужно повторять эти туториалы до полного запоминания и фантазировать - добавлять и изменять по-своему.
0
4176 / 2282 / 387
Регистрация: 05.10.2013
Сообщений: 6,385
Записей в блоге: 177
28.06.2020, 12:03 43
Цитата Сообщение от MiKITA17 Посмотреть сообщение
А то кодить на билдере 2009 года мне уже как-то стыдно
Я кода учился в универе (2004 - 2009), то для курсовых и учебных задач делал GUI-приложения на C++Builder 6 (2006). У меня ещё лежит с тех времён эта толстая книга в бумажном виде: Программирование в C++Builder 6 и 2006. У вас уже есть установленный Qt для GUI. Так что будем считать, что это вопрос решён. Изучайте Qt, через создание простых GUI-приложений и простых игр. Очень рекомендую эту небольшую онлайн книгу http://zetcode.com/gui/qt5/ В конце описываются и демонстрируется код двух игр: Snake и Breakout. Эти игры - это классический "hello, world" в мире разработки игр, так что их обязательно нужно уметь написать.

Теперь к вопросу выбора движка. Изучайте одновременно Unity и SFML. Unity вам даст умение программировать на самом высоком уровне абстракции, а SFML - немного другой подход, что нужно всё кодом, что тоже интересно и полезно. Одновременно будете изучать программирование 2D игр на С++ и 2D/3D игр на Unity.

Для 2D на C++ у вас есть SFML, но я считаю, что нужно ещё изучать графический движок на C++. Я советую взять графический движок Qt3D, который встроен в Qt. За одно будете практиковаться c Qt и делать приложения с 3D графикой и с GUI на Qt. Этот графический движок можно использовать для 3D игр. Qt3D является обёрткой над OpenGL. При этом не нужно писать шейдеры и устанавливать Assimp. В Qt3D встроен Assimp. Уже многое в Qt3D реализовано, в том числе скелетная анимация, которую я ещё не пробовал. Например, реализованы контролеры для работы с камерой. К примеру, QOrbitCameraController, который поворачивает камеру вокруг объекта и QFirstPersonCameraController, который перемещает камеру, как в 3D шутерах. Можно добавить Bullet, чтобы хотя бы детектировать прикосновение объектов. По-моему, в Bullet ещё Raycast должен быть, то есть выбор объектов по клику мыши.

Небольшим числом строк кода я загрузил кубик, который раскрасил в бесплатном 3D редакторе Blender. Поместил на сцену камеру и точечный источник света. Добавил управление камерой QOrbitCameraController. Как вариант, можно сделать 3D змейку, создав свои простые 3D объекты в Blender или найти их в интернете. Позже попробую загрузить объекты из Blender для которых применю физику на Bullet - падающий кубик на угол другого кубика для начала. Чем больше разнообразных практических упражнений, тем лучше.

Название: BulletQt3DCpp.gif
Просмотров: 44

Размер: 434.3 Кб

main.cpp
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#ifdef _WIN32
#include <windows.h>
extern "C" __declspec(dllexport) DWORD NvOptimusEnablement = 0x00000001;
extern "C" __declspec(dllexport) DWORD AmdPowerXpressRequestHighPerformance = 0x00000001;
#endif
 
#include <QGuiApplication>
#include <QEntity>
#include <Qt3DWindow>
#include <btBulletDynamicsCommon.h>
#include <QCamera>
#include <QPointLight>
#include <QTransform>
#include <QSceneLoader>
#include <QOrbitCameraController>
#include <QPhongMaterial>
 
int main(int argc, char *argv[])
{
    QGuiApplication::setAttribute(Qt::AA_UseDesktopOpenGL);
    QGuiApplication app(argc, argv);
    Qt3DExtras::Qt3DWindow view;
    view.setGeometry(500, 100, 270, 270);
 
    Qt3DRender::QCamera *camera = view.camera();
    camera->lens()->setPerspectiveProjection(60.0f, view.width()/(float)view.height(), 0.1f, 1000.0f);
    camera->setPosition(QVector3D(0.0f, 0.0f, 30.0f));
    camera->setViewCenter(QVector3D(0.0f, 0.0f, 0.0f));
 
    Qt3DCore::QEntity *rootEntity = new Qt3DCore::QEntity;
 
    Qt3DCore::QEntity *lightEntity = new Qt3DCore::QEntity(rootEntity);
    Qt3DRender::QPointLight *pointLight = new Qt3DRender::QPointLight(lightEntity);
    Qt3DCore::QTransform *lightTransform = new Qt3DCore::QTransform(rootEntity);
    lightTransform->setTranslation(QVector3D(10.0f, 20.0f, 30.0f));
    lightEntity->addComponent(pointLight);
    lightEntity->addComponent(lightTransform);
 
    Qt3DCore::QEntity *cubeEntity = new Qt3DCore::QEntity(rootEntity);
    Qt3DRender::QSceneLoader *sceneLoader = new Qt3DRender::QSceneLoader(cubeEntity);
    sceneLoader->setSource(QUrl("qrc:/Models/Cube.obj"));
    cubeEntity->addComponent(sceneLoader);
    Qt3DCore::QTransform *cubeTransform = new Qt3DCore::QTransform(cubeEntity);
    cubeTransform->setScale(7.0f);
    cubeEntity->addComponent(cubeTransform);
    QStringList list = sceneLoader->entityNames();
 
    Qt3DExtras::QPhongMaterial *material = new Qt3DExtras::QPhongMaterial(rootEntity);
    rootEntity->addComponent(material);
 
    Qt3DExtras::QOrbitCameraController *cameraController = new Qt3DExtras::QOrbitCameraController(rootEntity);
    cameraController->setCamera(camera);
    cameraController->setLookSpeed(180.0f);
    cameraController->setLinearSpeed(50.0f);
 
    view.setRootEntity(rootEntity);
    view.show();
    return app.exec();
}
.pro
Код
QT       += 3dcore 3drender 3dlogic 3dextras

INCLUDEPATH += "E:\Libs\Bullet3-2.89\include"

LIBS += -L"E:\Libs\Bullet3-2.89\lib"
LIBS += -lBulletDynamics -lBulletCollision -lLinearMath

SOURCES += \
    main.cpp

RESOURCES += \
    Models.qrc
0
Вложения
Тип файла: rar BulletQt3DCpp_Win86.rar (11.80 Мб, 3 просмотров)
Тип файла: rar BulletQt3DCpp_Source.rar (14.7 Кб, 2 просмотров)
alecss131
28.06.2020, 12:51
  #44

Не по теме:

Цитата Сообщение от 8Observer8 Посмотреть сообщение
что C# - это усовершенствованный C++
угу угу, особенно компиляция в байткод и использование JIT и майки долго не хотели делать язык кросплатформенным
использование JIT компиляции превратило язык в по сути тоже самое что и java, только вместо jvm тут свое, а то что сборка в ехе ни о чем не говорит (так как это не ехе а аналог jar) и появилась проблема легкого получения исходников из программы, причем еще проще чем в java (я изначально думал это особенности юнити, но как оказалось весь язык такой, проще потому что полученный код куда ближе к оригиналу чем декомпилированный java)
имхо нету ничего лучше компиляции в нативный код
почитайте вот отзывы начиная с Java - это недоразвитый си шарп? (два примера почему это так)
имхо переход к байткоду это шаг назад, не буду разводить холивары

0
4176 / 2282 / 387
Регистрация: 05.10.2013
Сообщений: 6,385
Записей в блоге: 177
28.06.2020, 13:34 45
Цитата Сообщение от alecss131 Посмотреть сообщение
угу угу, особенно компиляция в байткод
Я имел ввиду только с точки зрения удобство написания кода. Да, много синтаксического сахара, но эти мелочи так приятны. Есть и не очень мелкие вещи, как ключевое слово interface. Передача в функции с ключевыми словами out/ref мне нравится. Встроенные getter/setter в виде свойств. Но в тоже время если смотреть на Qt, то там тоже много улучшений для программирования, поэтому Qt C++ примерно сравнялся с C# по удобству.

Цитата Сообщение от alecss131 Посмотреть сообщение
а то что сборка в ехе ни о чем не говорит
А сборка уже не в EXE можно делать. Они же активно развивают .NET Core. Один раз собираешь на одной платформе приложение, как по типу jar, а потом без перекомпиляции запускаешь на любом ПК. Правда, пока только консольные приложения, ну и OpenTK перенесли на .NET Core. Только для запуска нужно, чтобы пользователь один раз поставил .NET Core Run, как по типу Java. GUI-приложения на .NET Core можно будет делать

Цитата Сообщение от alecss131 Посмотреть сообщение
имхо нету ничего лучше компиляции в нативный код
От C# никуда не денешься. Во всех городах РФ можно найти работу программиста игр в основном только на Unity. Ожидается, что рынок мобильных игр ещё больше будет расти в ближайшие годы. Unity изучают даже в некоторых универах страны и наверное, даже в школах. Примерно 5 раз я делал небольшие фриланс на Unity для студентов. Оно и понятно, многим интересно изучать программирование в графической форме, можно придумывать много интересных упражнений. Unity и Godot внесли огромный вклад в популярность языка C#.

Цитата Сообщение от alecss131 Посмотреть сообщение
Java - это недоразвитый си шарп?
Я изучал когда-то Java по книге "Философия Java", которая у меня есть в бумажном виде. Мне по синтаксису C# больше нравился, тем более что самый популярный движок - это Unity. Мне C# сейчас нужен только для Uniyt. Для GUI приложений лучше всего использовать Qt C++, потому что компиляция в нативный машинный кода, без виртуальных машин, а значит получаем супер скорость и супер удобства на счёт фреймворка Qt. Плюс у меня в бОльшем приоритете веб, потому что запускается в один клик, без установки RunTime, без скачиваний, пользователь один раз кликнул и запустил.

Добавлено через 6 минут
По поводу того, что будет выпущен новый GUI фреймворк на базе .NET Core. Из группы вконтакте Metanit'а скопировал если кому-то будет интересно, но я ещё раз призываю использовать Qt C++.

Microsoft анонсировал новый кроссплатформенный фреймворк для создания графического интефрейса - .NET Multi-platform App UI или MAUI.
Предполагается, что он охватит самые разные платформы "от Android и iOS до Windows и macOS".
MAUI представляет эволюцию платформы Xamarin.Forms, которая хорошо себя показала на мобильном направление, и теперь этот опыт хотят распространить на десктоп.
MAUI должна отразить унификацию платформы .NET и объединение .NET Core и Mono/Xamarin на основе единой библиотеки классов (BCL) и SDK.
По сути MAUI будет представлять один проект для всех платформ. При этом по прежнему можно будет получить доступ к нативным возможностям
конкретной операционной системы. Первая превью-версия должна будет выйти в конце 2020 года. А сам фреймворка будет готов только в рамках .NET 6 в ноябре 2020.
Разработчики Xamarin.Forms смогут постепенно мигрировать на новую платформу. А Xamarin.iOS и Xamarin.Android станут частью
.NET 6 в качестве .NET for iOS и .NET for Android.
Какое будущее в этом случае ожидает сам Xamarin Forms?
Xamarin.Forms новую старшую (major) версию позже в этом году и
продолжит выпускать подверсии и сервисы каждые 6 недель вплоть до релиза .NET 6 в ноябре 2021.
Последний релиз Xamarin.Forms будет поддерживаться в течение года после выпуска, при этом предполагается, что разработчики будут мигрировать на .NET MAUI.
Подобности https://devblogs.microsoft.com... rm-app-ui/
0
4176 / 2282 / 387
Регистрация: 05.10.2013
Сообщений: 6,385
Записей в блоге: 177
28.06.2020, 13:56 46
MiKITA17, настоятельно вам рекомендую начать изучать JavaScript с переходом на язык TypeScript. Вы сможете страивать свои игры в социальные сети, такие как: вконтакте, facebook и т.д. Сможете взаимодействовать с API этих социальных сетей. На JavaScript/TypeScript самый простой способ сделать реальный мультиплеер вебсокетах и Node.js без денежных затрат, потому что есть такие бесплатные хостинги, как Heroku, OpenShift и т.д. На этих хостингах есть бесплатные базы данных: SQLite, MySQL, MongoDB, PostgreSQL и т.д. Вы сможете одновременно практиковаться в программировании клиент-серверных приложений, в использовании SQL, взаимодействии с API социальных сетей. Самый популярный бесплатный фреймворк для 2D-игр - это Phaser. Этот фреймворк позиционирует себя, как mobile-first, то есть оптимизирован для работы с мобильными устройствами. В целом, вы можете практиковаться в программировании, через игры и особой нет разницы какой язык, потому что многие принципы программирования остаются теми же самыми и могут быть перенесены с языка на язык и с движка на движок. Phaser - это игровой фреймворк, который заточен на программирование кодом, как SFML или MonoGame. Phaser является обёрткой над WebGL, то есть графика рисуется с помощью шейдеров, которые загружаются в память видеокарты. При желании можно самому писать шейдеры для Phaser.

Приведу пример анимации. Запустите пример в браузере.



Смотрите, как мало кода надо:

index.html

PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<html>
  <body>
    <script src="https://cdn.jsdelivr.net/npm/phaser-ce@2.16.0/build/phaser.min.js"></script>
 
    <script>
      var sprite;
      var scene = new Phaser.Game(250, 250, Phaser.AUTO, '', {
        preload: preload,
        create: create,
        update: update,
      });
 
      function preload() {
        scene.load.image('cat', 'cat.png');
      }
 
      function create() {
        scene.stage.backgroundColor = '#8f939f';
        sprite = scene.add.sprite( scene.world.width, scene.world.centerY,'cat');
        sprite.anchor.setTo(0, 0.5);
      }
 
      function update() {
        if (sprite.position.x > scene.world.width - sprite.width) {
          sprite.position.x -= 2;
        }
      }
    </script>
  </body>
</html>
1
Угадываю функции...
2 / 2 / 0
Регистрация: 18.11.2019
Сообщений: 77
28.06.2020, 19:00  [ТС] 47
Цитата Сообщение от 8Observer8 Посмотреть сообщение
настоятельно вам рекомендую начать изучать JavaScript с переходом на язык TypeScript
Спасибо, но дайте хотя бы в sfml и Qt освоиться, а то хвататься и изучать всё и сразу времени не хватит

Добавлено через 2 часа 36 минут
И да, раз уж столкнулся с такой проблемой напишу сюда же. Как сделать так, чтобы не нужно было таскать за эксешником кучу dll-ок. Мало того что как по мне это не очень красиво, да ещё я не могу найти нужных dll-ок. Вылезает сообщение "this application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem." и попробуй пойми что ему нужно. Пробовал кидать dll-ки из папки plugins в Qt\Tools\QtCreator\bin которая, но это не помогло. В интернете отрыл тему на этом же форуме (Ошибка This application failed to start because no Qt platform plugin could be initialized) но в ней отсылают на сайт документации Qt, где я опять же не нашёл ничего кроме папки plugins. Какие всё таки нужны dll-ки?
0
4176 / 2282 / 387
Регистрация: 05.10.2013
Сообщений: 6,385
Записей в блоге: 177
28.06.2020, 20:35 48
Цитата Сообщение от MiKITA17 Посмотреть сообщение
Как сделать так, чтобы не нужно было таскать за эксешником кучу dll-ок.
Я писал пошаговую инструкцию аж в 2014 году, ещё не пробовал актуальна ли она для Qt 5.15.0: Статическая сборка Qt 5.4 (MinGW) для Win7. Сжатие exe до мин. размера с помощью upx. Попробуйте и напишите здесь в своей теме получилось ли или какие ошибки выскакивают. Я не могу попробовать. У меня на жёстком катастрофически не хватает свободного места. Ели-ели удалось освободить на двух локальных по 4 ГБайта. После сжатия с помощью UPX сожмётся EXE до 5 МБайт.

Цитата Сообщение от MiKITA17 Посмотреть сообщение
"this application failed to start because no Qt platform plugin could be initialized
Это ошибку легко исправить. Нужно скопировать папку "platforms" к EXE из этой папки: C:\Qt\5.15.0\mingw81_32\plugins

Цитата Сообщение от MiKITA17 Посмотреть сообщение
Какие всё таки нужны dll-ки?
Надо запускать EXE и смотреть, что требует. Эти три не забудьте:
  • libgcc_s_dw2-1.dll
  • libstdc++-6.dll
  • libwinpthread-1.dll
На вашей машине может не ругаться, а на чужих может. Можно Virtual Box поставить с чистой Windows и тестировать.

Добавлено через 54 минуты
Я Virtual Box не ставил. Постепенно можно вычислить какие dll нужны. Надо выкладывать свои игрушки на форуме, просить знакомых, чтобы они запустили. После нескольких приложений или игрушек вы будете знать, какие требуются для релиза. Библиотеки нужно брать из этой папки: C:\Qt\5.15.0\mingw81_32\bin

Цитата Сообщение от MiKITA17 Посмотреть сообщение
Мало того что как по мне это не очень красиво
Правила такие, что у Qt три лицензии:
  • GPL - нужно к EXE добавлять архив с исходниками или ссылку на исходники, где можно скачать
  • LGPL - исходники не нужно раздавать, то собирать в статику нельзя, только динамические библиотеки
  • Коммерческая лицензия - нужно заплатить компании Qt и тогда можно собрать в статику и не предоставлять исходников

Если вы собираете в статику, то вы можете использовать GPL и предоставлять исходники.

Добавлено через 16 минут
MiKITA17, я считаю, что пока не стоит тратить время на сборку Qt в статику из исходников. Не так уж и много библиотек нужно будет добавить и весить приложение будет по современным меркам не очень много. Пользователь без труда отыщет exe-файл.
0
Модератор
1425 / 425 / 140
Регистрация: 11.08.2017
Сообщений: 1,445
28.06.2020, 21:12 49
Цитата Сообщение от 8Observer8 Посмотреть сообщение
с помощью UPX
и на ваш ехе будет ругаться почти каждый антивирус а сайт вирустотал выдавать кучу срабатываний
причем так будут вести даже на программе типа hello world
это уже проходил знаю
ехе в сотню мегабайт даже имхо лучше небольшого ехе но с кучей фалов в нагрузку
много файлов оправданно если крупный проект, но тогда уже нужен и инсталятор
хотя вон в маке приложение представляет из себя папку где в конце имени .app и такая папка является исполняемой, а внутри куча всего, программы крайне редко требуют установки (почти не встречал), распространяются в виде образа диска формата dmg который монтируется двойным кликом и имеет интерфейс (при это программу сжимает)
0
4176 / 2282 / 387
Регистрация: 05.10.2013
Сообщений: 6,385
Записей в блоге: 177
28.06.2020, 22:03 50
Цитата Сообщение от alecss131 Посмотреть сообщение
ехе в сотню мегабайт даже имхо лучше небольшого ехе но с кучей фалов в нагрузку
Чтобы избавиться от кучи файлов, которые требует SFML, и собрать в один EXE, автору темы придётся собирать SFML из исходников в статику. Я думаю, что это будет пустая трата времени. Подумаешь, 3-4 лишние DLL. Сейчас ему лучше тратить время каждый день на написание простых игр на SFML, читать книги по SFML, изучать чужие исходники игр, делать свои на основе чужих.

MiKITA17, если вы пишите GUI приложение на Qt, то вам нужно будет добавить из Qt всего три библиотеки: Qt5Core.dll, Qt5Gui.dll и Qt5Widgets.dll. А так же создать папку "platforms" рядом с EXE, куда положить библиотеку qwindows.dll из папки: C:\Qt\5.15.0\mingw81_32\plugins\platforms

У меня новое достижение, в плане создания GUI для игр. До меня дошло, как одновременно можно изучать создание GUI на Qt C++ и тренироваться в программировании игр на SFML. Можно сделать GUI для изучения Box2D. Для учебных игр не нужно красивое GUI. Можно делать классическое GUI, которое идёт с Qt, а SFML нужно встроить внутрь окна Qt. Мы получаем всё богатство GUI и SFML графику в одном окне. Видео инструкция, которую я проверил, она работает: How to create an SFML Widget in Qt Creator
Видео
0
Изображения
 
4176 / 2282 / 387
Регистрация: 05.10.2013
Сообщений: 6,385
Записей в блоге: 177
28.06.2020, 22:04 51
Это инструкция с официального сайта SFML, где расписано, по-моему, тоже самое, чем происходит в видео сообщением выше: Integrating to a Qt interface
0
4176 / 2282 / 387
Регистрация: 05.10.2013
Сообщений: 6,385
Записей в блоге: 177
28.06.2020, 22:20 52
Здесь на скринште я показал, каких библиотек должно быть достаточно, а может быть какие-то лишние - у меня нет чистой операционки, чтобы проверить. По-моему, ничего страшного в этом списке нет, exe можно легко найти в нём. Хотя я предпочитаю больше веб-приложения для запуска которых нужен только один клик по ссылке. Вообще если требования позволяют запускать приложение в браузере, то лучше делать web-приложение, а не не позволяют, то в виде standalone-приложения.

Может библиотеку openal32.dll я зря включил, но она идёт вместе с SFML. На всякий случай, я её буду добавлять к своим поделкам. Кстати, выкладывание своих даже таких простых творений в виде релиз очень мотивирует. Выкладывание кода даже так не мотивирует, потому что код - это не исполняемое приложение, а EXE - это уже достижение и оформленный результат, который может запустить любой человек, даже далёкий от программирования и IT.

Сборка в релиз для Windows: QSfmlWidgetDialog_Win86.rar (10.00 Мб)

Название: QSfmlWidgetDialog_ListOfLibs.png
Просмотров: 36

Размер: 8.1 Кб
0
Вложения
Тип файла: rar QSfmlWidgetDialog_Win86.rar (10.00 Мб, 2 просмотров)
Угадываю функции...
2 / 2 / 0
Регистрация: 18.11.2019
Сообщений: 77
29.06.2020, 08:54  [ТС] 53
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Видео инструкция, которую я проверил, она работает: How to create an SFML Widget in Qt Creator
Ааааа сложнаа. По крайней мере для меня, новичка в Qt и sfml понять что происходит в видео или в инструкции очень сложно.
0
4176 / 2282 / 387
Регистрация: 05.10.2013
Сообщений: 6,385
Записей в блоге: 177
29.06.2020, 10:47 54
Цитата Сообщение от MiKITA17 Посмотреть сообщение
Ааааа сложнаа. По крайней мере для меня, новичка в Qt и sfml понять что происходит в видео или в инструкции очень сложно.
Такие моменты надо ценить. Значит будет рост, если сделать усилие и проделать работу. Если честно, я сам мало что понял, когда смотрел в первый раз, но выполнил, просматривая второй раз, ставя видео на паузу. Третий раз будет легче выполнять. Буду повторять, пока не запомню на всё жизнь. Попутно буду почитывать документацию и официальную инструкцию с сайта SFML. Мне нужно GUI, чтобы сделать переключение языков (русский/английский) в своих играх на SFML, а так же добавить меню и диалоговое окно для подключения к удалённому сервере с помощью вебсокетов. Сделаю крестики-нолики с сервером на Node.js с хостингом на Heroku (Getting Started on Heroku with Node.js), а клиент будет на Qt SFML. В Qt встроена поддержка вебсокетов. Мне интересно программировать именно сетевые игры.

Определённые достижения в направлении вебсокетов у меня есть. Я выполнил практическую часть инструкции: WebSockets Crash Course

Видео


Я перемотал теорию - потом над ней подумаю, и написал только практику, этот код где ставлю точку останова, чтобы как в видео засечь момент, когда подключается клиент:

server.js

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
const http = require("http");
const WebSocketServer = require("websocket").server;
let connection = null;
 
const httpServer = http.createServer(
    (req, res) =>
    {
        console.log("We have received a request");
    });
 
const webSocket = new WebSocketServer({
    "httpServer": httpServer
});
 
webSocket.on("request",
    request =>
    {
        connection = request.accept(null, request.origin);
        connection.on("onopen",
            () =>
            {
                console.log("Opened");
            });
        connection.on("onclosed",
            () =>
            {
                console.log("Closed");
            });
        connection.on("onmessage",
            message =>
            {
                console.log(`Received message ${message}`);
            });
    });
 
httpServer.listen(3000, () => console.log("My server is listening on port 3000"));
У меня происходит локальное соединение клиента на Qt C++ с сервером на Node.js, то есть в момент соединения клиента с сервером через вебсокет срабатывает точка останова на сервере. Код клиента я взял из официального примера Echo Client Example. Убрал лишние комментарии:

main.cpp

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
#include "EchoClient.h"
#include <QCoreApplication>
 
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
 
    EchoClient client(QUrl(QStringLiteral("ws://localhost:3000")), true);
 
    return a.exec();
}
EchoClient.h

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#ifndef ECHOCLIENT_H
#define ECHOCLIENT_H
 
#include <QObject>
#include <QWebSocket>
 
class EchoClient : public QObject
{
    Q_OBJECT
public:
    explicit EchoClient(const QUrl &url, bool debug = false, QObject *parent = nullptr);
 
signals:
    void closed();
 
private slots:
    void onConnected();
    void onTextMessageReceived(QString message);
 
private:
    QWebSocket m_webSocket;
    QUrl m_url;
    bool m_debug;
};
 
#endif // ECHOCLIENT_H
EchoClient.cpp

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include "EchoClient.h"
#include <QDebug>
 
EchoClient::EchoClient(const QUrl &url, bool debug, QObject *parent) :
    QObject(parent),
    m_url(url),
    m_debug(debug)
{
    if (m_debug)
    {
        qDebug() << "WebSocket server:" << m_url;
    }
 
    connect(&m_webSocket, &QWebSocket::connected, this, &EchoClient::onConnected);
//    connect(&m_webSocket, &QWebSocket::disconnect, this, &EchoClient::closed);
    m_webSocket.open(QUrl(m_url));
}
 
void EchoClient::onConnected()
{
    if (m_debug)
    {
        qDebug() << "WebSocket connected";
    }
    connect(&m_webSocket, &QWebSocket::textMessageReceived,
            this, &EchoClient::onTextMessageReceived);
    m_webSocket.sendTextMessage(QStringLiteral("Hello, world!"));
}
 
void EchoClient::onTextMessageReceived(QString message)
{
    if (m_debug)
    {
        qDebug() << "Message received: " << message;
    }
    m_webSocket.close();
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.06.2020, 10:47

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Какой мультиплеер лучше выбрать?
Который мультиплеер лучше выбрать? Где почитать о нем? Такой что не надо вводить IP адресов а...

Как лучше залить текстуру в массив? Какой формат текстуры лучше использовать?
Как лучше залить текстуру в массив? Какой формат текстуры лучше использовать?

3D движок вручную, какие инструменты выбрать?
Всем добрый день, интересует вопрос по поводу того, какие библиотеки использовать для...

Выбрать движок? [Unity3D, XNA, OGRE, Wave, Delta, Axiom, Mono.]
Собственно сабж. Сам не первый год в геймдеве, но вот желание делать новый проект - и опять не...

Какой игровой движок будет быстро работать на такой конфигурации компьютера?
Подскажите, какой игровой движок из популярных будет быстро работать на такой конфигурации: AMD...

Какой движок лучше выбрать
Привет Хочу сделать сайт-визитку по технике. Вопрос какой лучше движок выбрать вордпресс или юкоз...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
54
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.