LINUX.ORG.RU

Какое API вы хотели бы видеть у «игрового» движка?

 , , ,


0

3

API на языке Си. Те кто работал/работает с игровыми/графическими движками, какое API более удобно было для вас? Что бы вы хотели видеть и иметь? Нужно ли было вам два API низкоуровневое настраивать сам двигатель и высокоуровневое для простой работы с ним.

Чтобы для вас было лучше. К примеру вот так:

/*Initialize systems*/
#define ON       0
#define OFF      1

int init_full    (void);
int init_video   (int on_off);
int init_audio   (int on_off);
int init_keyboard(int on_off);
int init_mouse   (int on_off);
int init_joystick(int on_off);
int init_gebung  (const char input_log_file);

Или вот так:

/*Initialize systems*/

#define ON       0
#define OFF      1

#define FULL     0
#define VIDEO    1
#define AUDIO    2
#define KEYBOARD 3
#define MOUSE    4
#define JOYSTICK 5
#define DEBUNG   6

int init_system(int name_sub_system,int on_off);

То есть иметь функцию с множеством параметров или множество узкоспециализированных функций?

Процедурно ,да, прошу ни слова о плюсах, да я понимаю что от плюсов в этом случае одни плюсы (кому то, но не мне).

Ну и прочие ваши идеи и пожелания.

★★★★★

Просто init_context()

x4DA ★★★★★
()

Зависит от функции. Если инициализация каждого из вариантов - это один-два вызова процедуры, то имеет смысл все в одну функцию запихать.

dikiy ★★☆☆☆
()

Имхо, первый вариант. А вообще лучше не распылять усилия и присоединяться к пилящим SDL 2 - по-моему, функциональность во многом перекрывается

wingear ★★★★
()
init(WITH_BLACKJACK | WITH_GIRLS | WITH_BEER );

маски сам напишешь ;)

если не секрет, зачем велосипедить, и чем не устраивают текущие решения?

aol ★★★★★
()
Ответ на: комментарий от aol

init(WITH_BLACKJACK | WITH_GIRLS | WITH_BEER );

Как вариан имеет место быть.

зачем велосипедить

Образование

Dron ★★★★★
() автор топика
Ответ на: комментарий от unfo

Хорошее API у OpenSceneGraph

Гляну, спасибо.

Dron ★★★★★
() автор топика

Engine_t *engine = MakeNewEngine(paramparam);
Engine_readconfig(engine, config);
Engine_init(engine);
Engine_addObject(engine, paramparam);
Engine_loadXyz(engine, paramparam);
Engine_start(engine);
Engine_removeObject(engine, paramparam);
Engine_stop(engine);
Engine_destroy(engine);
Bad_ptr ★★★★★
()
Ответ на: комментарий от wingear

присоединяться к пилящим SDL 2

Нужно, годно, если смогу то присоединюсь, часть api просто поверх SDL.

Dron ★★★★★
() автор топика
Ответ на: комментарий от Bad_ptr

Уже хорошо, об удобных конфигах тоже надо подумать, спасибо за наводку.

Dron ★★★★★
() автор топика
enum { ON, OFF } activate;
enum { FULL, VIDEO, AUDIO, KEYBOARD, MOUSE, JOYSTICK, DEBUNG } subsys;
int init_system(enum subsys, enum activate);
beastie ★★★★★
()
Ответ на: комментарий от note173

Не воспринимайте это как реализацию это пример подхода просто, хорошо бы если высказались что вам хотелось бы на уровне API чем больше мнений тем лучше.

Dron ★★★★★
() автор топика
Ответ на: комментарий от beastie

Ну в реализации так конечно красивей и удобней, спасибо. Но я сейчас пока не о ней.

Dron ★★★★★
() автор топика

Могу подсказать как делать не надо. Приходилось работать с движком, ClanLib. Так вот, там для инициализации требовалось создать объект, который больше нигде использоваться не будет. Т.е

InitGL initGL;
InitRender initRender;
InitSmth initSmth;

...
Хотя, кроме конструктора эти классы ничего не содержали. Т.е функция, по понятным только автору причинам обёрнутая в класс. Но это далеко не всё. За отрисовку текста там отвечает объект шрифта, что, мягко говоря, нелогично, а любое изображение необходимо привязывать к графическому контексту и это никак не повлияет на возможность отрисовки на любом контексте. К счастью, вовремя с него свалил и не успел оценить всех прелестей, но если захочешь узнать, как делать не_надо, просто почитай доки по кланлибу.

devpony
()
Ответ на: комментарий от resurtm

Ну обернуть в классы думаю проблем не составит, но это уже другая история :)

Dron ★★★★★
() автор топика
Ответ на: комментарий от devpony

Спасибо, посмотреть на то как делать не надо это важно и я это серьёзно.

Dron ★★★★★
() автор топика
Ответ на: комментарий от beastie

Да, да ,да вы правы абсолютно, грешу иногда, была бы третья рука она бы держала на готове линейку ☺ , спасибо.

Dron ★★★★★
() автор топика
Ответ на: комментарий от Dron

Какие классы, ты о чём? Я о ООП как парадигме дизайна архитектуры/интерфейса, а не о конкретной реализации. На C тебе никто не запрещает делать ООП.

Artificial_Thought ★★★★
()
Ответ на: комментарий от Artificial_Thought

А вон вы про что, просто привык уже слышать когда кричат про ОПП подразумевают классы ☺ . Ну если так, то как вариант имеет место быть, спасибо.

Dron ★★★★★
() автор топика

Тогда уж лучше так:

enum subsystem {
 sub_video    = 1 << 1,
 sub_audio    = 1 << 2,
 sub_keyboard = 1 << 3,
 sub_mouse    = 1 << 4,
 sub_joystick = 1 << 5,
};

int init_system(unsigned subsystems);
unsigned get_subsystem_state() const;
andreyu ★★★★★
()
Ответ на: комментарий от note173

От игрового движка хотелось бы видеть совсем не это.

Точно, начинать проектирование движка с придумывания способа инициализации странно.

andreyu ★★★★★
()
Ответ на: комментарий от dmfd

Итак, по пунктам:

1) мерзкое 3D не нужно

2) игры не нужны

3) писать движок вместо игры — глупость

4) универсальных движков полно, игор нет

5) каждый третий школьник пишет свой движок

dmfd
()
Ответ на: комментарий от dmfd

1)Не 3D единым.

2)Возможно, но просто визуализировать что-то бывает очень нужно.

3)В настоящий момент самообразование.

4)Контр аргументов нет.

5) Пускай это полезно, получают бесценный опыт.

Dron ★★★★★
() автор топика
Ответ на: комментарий от Dron

Зачем? Лучше пусть у них костюмы красивые будут.

olibjerd ★★★★★
()
Ответ на: комментарий от Dron

Мотивация для прохождения же!

По теме: правда, лучше игру делай. Я cube перепиливать взялся не от хорошей жизни.

netcat ★★
()

Нужно ли было вам два API низкоуровневое настраивать сам двигатель и высокоуровневое для простой работы с ним.

Только высокоуровневое. При качественном высокоуровненом API использование низкоуровневого будет не настройкой, а бессмысленным переписыванием части высокоуровневого. А уровень сущностей настройке не мешает.

init_system — это не API.

За образец рекомендую взять API clang-c или OpenGL, но оперировать сущностями, важными для криэйторов контента.

quiet_readonly ★★★★
()
Последнее исправление: quiet_readonly (всего исправлений: 1)
Ответ на: комментарий от aol

Нафига все эти with, with, with, если можно использовать автоматическую ленивую инициализацию и оперировать только игровыми сущностями?

quiet_readonly ★★★★
()
Последнее исправление: quiet_readonly (всего исправлений: 1)
Ответ на: комментарий от Bad_ptr

Всё, кроме MakeNewEngine и Engine_destroy — имитация бурной деятельности. Да и хорошо бы библиотечный префикс иметь у функций.

quiet_readonly ★★★★
()

API на языке Си

я бы хотел увидеть редактор уровней интирпрайз уровня, где ничего писать не нужно. в часности редактор ИИ и шейдеров - в виде редактора блоксхемы из палитры доступных компонентов.

апи это не геймдев а инженерия.

x0r ★★★★★
()
Ответ на: комментарий от buddhist
struct Game *game = game_init(title_name, GENRE_RPG|GENRE_MMO|GENRE_FPS|GENRE_QUEST);
game_graphone_init(game, GRAPHONE_CRYSIS);
game_set_korovans(game, 1);
...
game_start(game);
...
game_destroy(game);
O02eg ★★★★★
()
Ответ на: комментарий от schizoid

Не только ради игр, просто визуализация тоже важна и поболее игр.

Dron ★★★★★
() автор топика
Ответ на: комментарий от quiet_readonly

оперировать сущностями, важными для криэйторов контента.

Да, это действительно важно, спасибо.

Dron ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.