Войти
Arctic EngineФорум

Нужна помощь в разработке (7 стр)

Страницы: 14 5 6 7 8 9 Следующая »
#90
0:12, 11 мая 2022

Huldra
> AE не конкурирует с godot
AE сейчас вообще с кем-то может конкурировать?))

#91
0:13, 11 мая 2022

Huldra
> И на чем же тогда делать игры чтобы все было хорошо сделано и при этом на С++ ?
Ниначём увы. Не создали ещё ни 1 нормального движка.

#92
(Правка: 4:19) 0:15, 11 мая 2022

samrrr
> AE сейчас вообще с кем-то может конкурировать?))
Напрямую разве что с SDL и SFML, при этом AE выигрывает по простоте результирующего кода, но может проигрывать по количественным фичам типа поддержки 100500 форматов данных.

Arctic engine отличается тем, что с ним простые вещи делать действительно просто, и при этом принципиально не может возникнуть ситуации когда что-то сделать совершенно невозможно. Лучше всего arctic engine подходит для создания простых 2д игр и знакомства с программированием.

Arctic Engine хорошо подходит если ты хочешь делать по дюжине разных игр в месяц в основном занимаясь именно программированием и прокачивая навык написания кода

Можно сравнить arctic engine с парой популярных аналогов. Начнем с простоты первых шагов: arctic engine автоматически создает проекты для Visual Studio, XCode и makefile для linux (x86 или Raspberry Pi), а в SDL2 только настройка проекта в Visual Studio займет пол часа, причем уже в этом месте многим нужна помощь и поддержка сообщества.

Посмотрим на простые задачи. Как загрузить и вывести картинку на экран в arctic engine и в SDL2?

arctic engine:

Sprite hero;
hero.Load("hero.tga");
...
hero.Draw(x, y);

SDL2:

std::string imagePath = getResourcePath("Lesson1") + "hero.bmp";
SDL_Surface *bmp = SDL_LoadBMP(imagePath.c_str());
if (bmp == nullptr) {
SDL_DestroyRenderer(ren);
SDL_DestroyWindow(win);
std::cout << "SDL_LoadBMP Error: " << SDL_GetError() << std::endl;
SDL_Quit();
return 1;
}
SDL_Texture *tex = SDL_CreateTextureFromSurface(ren, bmp);
SDL_FreeSurface(bmp);
if (tex == nullptr) {
SDL_DestroyRenderer(ren);
SDL_DestroyWindow(win);
std::cout << "SDL_CreateTextureFromSurface Error: " << SDL_GetError() << std::endl;
SDL_Quit();
return 1;
}
...
int w, h;
SDL_QueryTexture(tex, NULL, NULL, &w, &h);
SDL_Rect dst(x, y, w, h);
SDL_RenderCopy(ren, tex, NULL, &dst);

Ну то есть arctic engine позволяет делать игру, а SDL2 позволяет изучать SDL2

#93
4:20, 11 мая 2022

Важная идея в основе Arctic Engine заключается в том, что игру можно и нужно писать прямо на С++ и что для написания игры не нужны никакие скриптовые языки.

#94
11:28, 11 мая 2022

Huldra
> Важная идея в основе Arctic Engine заключается в том, что игру можно и нужно
> писать прямо на С++ и что для написания игры не нужны никакие скриптовые языки.
Самый весомый гвоздь в крышку гроба этого движка. имхо.

#95
11:29, 11 мая 2022

Huldra
> Ну то есть arctic engine позволяет делать игру, а SDL2 позволяет изучать SDL2
Твоё сравнение несколько нечестное по отношению к SDL.
Во 1, ты включил код не относящийся к рендеру спрайта напрямую.
Во 2, ты сравниваешь Си-шную либу с плюсовой. Для честного сравнения стоит взять https://github.com/libSDL2pp/libSDL2pp

#96
11:31, 11 мая 2022

Huldra
> Важная идея в основе Arctic Engine заключается в том, что игру можно и нужно писать прямо на С++ и что для написания игры не нужны никакие скриптовые языки.
Ты явно не участвовал ни в 1 ААА проекте, рас такую чушь пишешь. Скриптовые языки в движок добавляют потому что многие вещи делать в C++ очень неудобно.

#97
14:53, 11 мая 2022

Huldra
> Как загрузить и вывести картинку на экран в arctic engine и в SDL2?
Ну давай по честному, выкинем проверку на ошибки как у тебя:

std::string imagePath = getResourcePath("Lesson1") + "hero.bmp";
SDL_Surface *bmp = SDL_LoadBMP(imagePath.c_str());
SDL_Texture *tex = SDL_CreateTextureFromSurface(ren, bmp);
SDL_FreeSurface(bmp);
...
int w, h;
SDL_QueryTexture(tex, NULL, NULL, &w, &h);
SDL_Rect dst(x, y, w, h);
SDL_RenderCopy(ren, tex, NULL, &dst);

Ну и С либа с голыми указателями... это лучше вообще в С++ не использовать. Давайка лучше возьмем что-нибудь адекватное, например SFML:

sf::Texture texture;
texture.loadFromFile("hero.bmp");
sf::Sprite sprite(texture);
....
sprite.setPosition(xy);
window.draw(sprite);

Внезапно не такая уж и большая разница. Ты лучше напиши что-то чуть более сложное, чем вывод одного спрайта. Например покажи, как красиво можно сделать работу с камерой. Представим большой статический мир (допустим 100*100 экранов), спрайты которого загружены из файла. И главного героя, который бегает по этому миру. И камера прикреплена к нему:

std::vector<sf::Sprite> static_sprites;
sf::Sprite hero_sprite;
sf::View view;
.....
view.setCenter(hero_sprite.getPosition());
for (const auto& sprite : static_sprites) {
  window.draw(sprite);
}
window.draw(hero_sprite);

Давай тот же код, только на AE.

AE (как и тот же SFML) вообще плохо подходит под игры с большим миром. Потому что все оптимизации нужно писать самому ручками. Банальное отсечение по фрустуму - уже делай сам.

#98
19:18, 11 мая 2022

MrShoor
> Давай тот же код, только на AE.

std::vector<Sprite> sprites;
std::vector<Vec2Si32> positions;
.....
Vec2Si32 view_pos = positions.back() - ScreenSize()/2;
for (size_t i = 0; i < sprites.size(); ++i) {
    sprites[i].Draw(positions[i] - view_pos);
}
#99
19:20, 11 мая 2022

MrShoor
> Ну давай по честному, выкинем проверку на ошибки как у тебя:
А в том то и дело что у меня проверка на ошибки не выкинута, у меня все ошибки обрабатываются, а вот в SDL - нет, чтобы получилась такая же обработка ошибок как в arctic engine нужен как раз весь этот длинный код на SDL

#100
19:21, 11 мая 2022

MrShoor
> возьмем что-нибудь адекватное, например SFML:
Верно, на SFML выходит 5 строк, на AE 3, разница не такая большая как с SDL... но ты опять забыл обработать ошибки на SFML

#101
20:08, 11 мая 2022

Huldra
> Верно, на SFML выходит 5 строк, на AE 3, разница не такая большая как с SDL...
> но ты опять забыл обработать ошибки на SFML
Неправильно, ты выкинул рендер hero вот у тебя и получилось короче.

#102
20:19, 11 мая 2022

Huldra
> но ты опять забыл обработать ошибки на SFML
Вижу глобальную заглушку. Слабо тянет на "обработку ошибок". Как мне попытаться загрузить текстуру, и если не получилось - сообщить об этом пользователю?
Вангую твой вопрос: "А зачем тебе это надо?". Отвечаю: "Я пишу игру, и параллельно пишу редактор уровней для игры. Я так часто делаю (в 4 из 5 игр наверное). Так вот, я хочу при открытии уровня в редакторе показать, что ресурс Х не загрзуился, чтобы понять, что надо либо уровень подправить, либо пути к ресурсу"

Но даже к заглушке куча вопросов. Вот код:

+ Показать

Если путь к файлу или имя файла содержат точку, то обломс? Т.е. файл C:\My.Name\pic.tga уже не откроется?

#103
20:27, 11 мая 2022

Huldra
> std::vector<Sprite> sprites;
> std::vector<Vec2Si32> positions;
> .....
> Vec2Si32 view_pos = positions.back() - ScreenSize()/2;
> for (size_t i = 0; i < sprites.size(); ++i) {
> sprites[i].Draw(positions[i] - view_pos);
> }
Спасибо за кривой перевод примера, что я предоставил. Давай я починю за тебя:

std::vector<Sprite> sprites;
Sprite hero_sprite;
std::vector<Vec2Si32> positions;
Vec2Si32 hero_position;
.....
for (size_t i = 0; i < sprites.size(); ++i) {
    sprites[i].Draw(positions[i] - hero_position);
}
hero_sprite.Draw(hero_position);

А теперь предположим, что я гружу уровень. Часть спрайтов отскейлина, часть повернута.
Код рендера на sfml:

std::vector<sf::Sprite> static_sprites;
sf::Sprite hero_sprite;
sf::View view;
.....
view.setCenter(hero_sprite.getPosition());
for (const auto& sprite : static_sprites) {
  window.draw(sprite);
}
window.draw(hero_sprite);

Код рендера на AE:

std::vector<Sprite> sprites;
Sprite hero_sprite;
std::vector<Vec2Si32> positions;
std::vector<float> zooms;
std::vector<float> rotations;
Vec2Si32 hero_position;
.....
for (size_t i = 0; i < sprites.size(); ++i) {
    sprites[i].Draw(positions[i] - hero_position, rotations[i], zooms[i]);
}
hero_sprite.Draw(hero_position);
#104
21:04, 11 мая 2022

MrShoor
> Если путь к файлу или имя файла содержат точку, то обломс? Т.е. файл
> C:\My.Name\pic.tga уже не откроется?
Похоже на то. Спасибо, исправлю!

Страницы: 14 5 6 7 8 9 Следующая »
Arctic EngineФорум