Форум программистов, компьютерный форум, киберфорум
Наши страницы
Игровые движки
Войти
Регистрация
Восстановить пароль
 
 
jonikster
8 / 8 / 1
Регистрация: 26.10.2014
Сообщений: 829
#1

Разработка игрового движка - Игровые движки

13.02.2017, 16:52. Просмотров 1290. Ответов 40
Метки нет (Все метки)

Здравствуйте.
Планирую используя C# разработать игру.
Есть вопрос:
Стоит ли разрабатывать движок, либо просто программировать с помощью библиотек?
Вид игры:
Подобие Grand Theft Auto, только звуковая.
Элементы игры:
Позиционируемый 3D звук, карта 40квкм, физика.
Пока решил в качестве окна создать окно из windows.forms, для звука использовать Bass или OpenAl.
Интересует, сразу лучше приступать к разработке логики игры, либо разработать игровой движок?
Всем заранее благодарен!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.02.2017, 16:52
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Разработка игрового движка (Игровые движки):

Создание игрового движка
Не могу найти даже немного информации об архитектуре самого простейшего...

Выбор игрового движка
Доброе время суток, товарищи! Помогите, пожалуйста, выбрать игровой движок ...

Хорошая ли графика игрового движка?
Очень интересно, понравится ли вам это графика ? Если многим понравится, то...

Описание игрового движка Unity3D
http://unity3dforge.com Unity3D — это программная среда для разработки 2D/3D...

Создание движка
Всем привет.Ребят прошу помощи в создании игры, а именно какой программой...

Создание 3Д движка
Здравствуйте! Вы видите - я новый на форуме. Обладаю начальными знаниями...

40
OlafNestandart
54 / 54 / 31
Регистрация: 24.10.2016
Сообщений: 186
16.02.2017, 20:23 #2
Движкописательство - это хроническая болезнь. Стоит раз подхватить эту заразу и все, человек пропал на всю жизнь.
А если серьезно - написать свой движок - очень трудоемкий процесс, рекомендую этим заниматься если конечная цель вашей работы именно движок. Или просто интересен сам процесс. Если вы планируете писать игру сложнее чем крестики-нолики, то лучше использовать готовые инструменты.
0
8Observer8
2040 / 1333 / 217
Регистрация: 05.10.2013
Сообщений: 4,235
Записей в блоге: 56
16.02.2017, 22:41 #3
Цитата Сообщение от OlafNestandart Посмотреть сообщение
А если серьезно - написать свой движок - очень трудоемкий процесс, рекомендую этим заниматься если конечная цель вашей работы именно движок. Или просто интересен сам процесс. Если вы планируете писать игру сложнее чем крестики-нолики, то лучше использовать готовые инструменты.
Я немного уточню, что автор темы - незрячий программист в прямом смысле, поэтому он хочет написать игровой движок без графики, только с 3D звуком. Его игра, конечно, будет сложнее, чем крестики-нолики, так как он хочет GTA, но готовые инструменты типа Unity ориентированны за зрячих людей и он не сможет в нём ориентироваться. Он выбрал "windows.forms, для звука использовать Bass или OpenAl.", чтобы писать всё только кодом и звуком.
0
jonikster
8 / 8 / 1
Регистрация: 26.10.2014
Сообщений: 829
18.02.2017, 06:06  [ТС] #4
О движках.
Просто не вижу смысла юзать готовый движок, ибо он содержит работу с графикой и многие прочие вещи, которые мне абсолютно не нужны.
Большинство популярных движков требуют работу в своём редакторе. А меня интересует процесс разработки полностью на коде.
Например небольшой пример на движке BGT под звуковые игры. (Прим. Как ЯП используется подобие Angel Script):
C++
1
2
3
4
5
6
7
sound logo; // объявление объекта типа sound
void main()
{
sound.load("sounds/logo.wav"); // с помощью метода load класса sound указываем путь к звуковому файлу
show_game_window("Game"); // Открываем окно с заголовком game
logo.play_wait(); // воспроизводим звук и во время воспроизведения остановить выполнение игры
}
К плюсам движков можно отнести отсутствие лишней работы, например вычисление 3д звука. Внутри движка может просто присутствовать функция, делающая процесс за нас. Например:
C++
1
play_3d(sound, listener_x, listener_y, listener_z, source_x, source_y, source_z);
Почему хочу разработать движок?
В работе с bass есть некоторые трудности.
Например, чтобы инициализировать библиотеку, нужно уже написать много лишнего:
C#
1
Bass.BASS_Init(-1, 44100, BASSInit.BASS_DEVICE_DEFAULT, IntPtr.Zero);
И это заменить на:
C#
1
init_sound();
Плюс для файла нужно создать поток, и уже потом воспроизводить.
Согласитесь, ужас.
Но проблема в том, что опыта разработки движка нету, и примеров под C# тоже.
0
Storm23
Эксперт .NETАвтор FAQ
5907 / 3506 / 1309
Регистрация: 11.01.2015
Сообщений: 4,616
Записей в блоге: 31
20.02.2017, 02:06 #5
jonikster,
А как вы себе представляете геймплей такой игры? Какие возможности игрока, как он будет ориентироваться в пространстве. И будет ли вообще там пространство? Проще говоря, что можно и нужно делать в такой игре?
0
OlafNestandart
54 / 54 / 31
Регистрация: 24.10.2016
Сообщений: 186
21.02.2017, 00:35 #6
Напрашивается вывод что ТС слепой. Если это так, то приношу свои извинения, но так же и считаю своим долгом указать на некоторые его оплошности в проектировании игры - никто не будет играть в игру без графики.
0
jonikster
8 / 8 / 1
Регистрация: 26.10.2014
Сообщений: 829
21.02.2017, 08:03  [ТС] #7
Наши незрячие будут играть. Им даже интересна такая тема. Многие скриптят в GTA. А о играх, у нас полно шутеров, онлайн и оффлайн, но такой игры не было никогда. Были подобия, но не значительные.
О игре и возможностях, то же, что в GTA, только без графики.
Ориентирование, 3д звук. О домах или других местах можно сделать маяк, и он будет указывать направление.
Есть две проблемы о которых я беспокоюсь.
1. Передвижение игрока в пространстве:
Для работы с игроком, повороты и проч, требуются хорошие знания тригонометрии. Вот здесь как раз плюс к движкам, где просто пишешь функцию с количеством градусов и все.
2. Карта:
Пока не представляю, как буду делать саму карту. Ведь тут речь не о комнатке 10 на 10, а о полноценной карте.
0
Storm23
Эксперт .NETАвтор FAQ
5907 / 3506 / 1309
Регистрация: 11.01.2015
Сообщений: 4,616
Записей в блоге: 31
21.02.2017, 10:40 #8
jonikster, по прежнему не очень понятно, как же ориентироваться в такой игре?
И кстати, что вы понимаете под физикой?

Цитата Сообщение от jonikster Посмотреть сообщение
Интересует, сразу лучше приступать к разработке логики игры, либо разработать игровой движок?
В данном случае лучше разрабатывать сначала геймплей и сюжет. Потому что нужно понять какие возможности движка потребуются. А потом уже делать движок под необходимые требования.
0
8Observer8
2040 / 1333 / 217
Регистрация: 05.10.2013
Сообщений: 4,235
Записей в блоге: 56
21.02.2017, 11:22 #9
jonikster, я помню в какой-то прошлой теме вы давали ссылку на youtube, где человек играет в бродилку/стрелялку для слепых. Видео было на русском. Можете ещё раз её дать? Я не могу найти. Там по сюжету слепой попадает на незнакомую местность. Ориентируется на звуку. У него что-то типа эхолота у руках, который по продолжительности звука показывает расстояние до препятствия. На экран не выводится никакой графики, просто чёрный экран. Играть можно только в наушниках.

Добавлено через 1 минуту
В игре было ещё рекомендовано завязать глаза чем-нибудь.
0
jonikster
8 / 8 / 1
Регистрация: 26.10.2014
Сообщений: 829
21.02.2017, 11:26  [ТС] #10
Поищите в ютубе "Blind surviver обзор".
О игре, тому, кто не играл, сложно представить.
В видео игре, также есть 3д звук. Если например навести в шутере прицел на врага, если он говорит или стреляет, то он звучит по центру в наушниках.
Также и здесь. Ориентирование чисто на 3д звук.
В игровых движках уже реализованы повороты и проч, а с нуля если нужно самому расчитывать.
0
8Observer8
2040 / 1333 / 217
Регистрация: 05.10.2013
Сообщений: 4,235
Записей в блоге: 56
21.02.2017, 11:59 #11
Цитата Сообщение от jonikster Посмотреть сообщение
Поищите в ютубе "Blind surviver обзор".
Нужно было сразу в первом сообщении это написать, чтобы люди могли представить, какую примерно игру вы хотите делать.
0
Storm23
Эксперт .NETАвтор FAQ
5907 / 3506 / 1309
Регистрация: 11.01.2015
Сообщений: 4,616
Записей в блоге: 31
21.02.2017, 13:30 #12
Цитата Сообщение от jonikster Посмотреть сообщение
В видео игре, также есть 3д звук. Если например навести в шутере прицел на врага, если он говорит или стреляет, то он звучит по центру в наушниках.
Также и здесь. Ориентирование чисто на 3д звук.
Это и так понятно и очевидно.
Но как например понять что перед вами здание? Как его обходить? Будет ли это сонар? Или звук должен заглушаться зданием? Или как? Звук должен имитировать реальность? Или же суть все таки в том, что бы не имитировать реальность а сделать игру в которой можно ориентироваться в пространстве по звуку? Это два совершенно разных случая.
Вы даете очень мало информации. С таким описанием вам никто не поможет..
0
8Observer8
2040 / 1333 / 217
Регистрация: 05.10.2013
Сообщений: 4,235
Записей в блоге: 56
21.02.2017, 13:35 #13
Цитата Сообщение от Storm23 Посмотреть сообщение
Вы даете очень мало информации. С таким описанием вам никто не поможет...
Он хочет точно такую же игру как Blind survivor. Чтобы понять, что он хочет нужно посмотреть обзоры этой игры или как написал автор темы об игре Blind survivor: "О игре, тому, кто не играл, сложно представить." Поэтому чтобы понять нужно скачать Blind survivor и поиграть. Лучше всего завязать глаза, чтобы ощутить себя в роли слепого и погрузиться в мир звуков.
0
jonikster
8 / 8 / 1
Регистрация: 26.10.2014
Сообщений: 829
21.02.2017, 16:40  [ТС] #14
Ну не совсем.
Там подобие такой, а чтоб полностью понять нужно поиграть во что-то вроде техношока.
Но Blind Surviver например, писался на Unity. А на Unity, как я знаю, нельзя просто писать как на библиотеке. Даже выбрав редактор в Unity.
О здании:
Пока я думаю сделать чтобы при нажатии опр клавиши появлялся список ближайших объектов. Или при нажатии опр клавиши, чтобы он говорил, что впереди.

Добавлено через 47 секунд
Просто беда в том что лучше всех я знаю C#, но я боюсь за производительность, и что для игры придётся учить C++. Я его и так сейчас учу, но медленно идёт обучение.
0
Storm23
Эксперт .NETАвтор FAQ
5907 / 3506 / 1309
Регистрация: 11.01.2015
Сообщений: 4,616
Записей в блоге: 31
21.02.2017, 17:46 #15
jonikster,
Эх, вот все нужно вытягивать клещами. Подробного описания задачи добиться невозможно
Ок, придется додумывать.
Предлагаю следующую модель:
1) Для максимального упрощения, предполагаем что поверхность земли - плоская, а все здания имеют бесконечную высоту. Таким образом будем работать только в двумерном пространстве, что облегчает на порядок процесс.
2) Все источники звука делим на два типа - точечные (понятно что это) и протяженные. Протяженные источники не имеют направления, если вы находитесь внутри них и имеют направление - если вы снаружи. Протяженные источники нужны для моделирования шума - шум улицы, пение птиц, ветер, шум травы и так далее. Такие источники нельзя моделировать точечно, потому что к ним нельзя "подойти". Можно быть либо внутри такого источника, либо он будет находиться на отдалении и тогда на него можно определить направление.
3) Далее, создаем карту местности. Поскольку нас интересует только звук, то на карту наносим только источники звука - либо точечные, либо протяженные - в виде областей произвольной формы. Это процесс в общем случае можно автоматизировать сделав процедурную генерацию типа местности и соответственно звуков в этой местности. Конечно, некоторые звуки нужно расставлять вручную - это звуки связанные с сюжетом. Также, нужно сделать скриптовый язык, который будет содержать сюжет и средства включения/выключения/настройки звуков.
4) Помимо карты местности нам нужны предметы на местности и здания. Предметы могут издавать собственные звуки. Здания - звуков не издают, но зато поглощают их. Это позволит понять заслонен ли источник звука зданием или нет. Если источник заслонен зданием, громкость резко уменьшается. Если не заслонен - резко увеличивается.
5) Также нам нужно нанести здания в виде стен на карту для того, что бы персонаж не смог проходить сквозь стены. Предлагаю для простоты любое здание представлять в виде прямоугольника (не забываем что мы в 2d), в котором находятся двери - через которые персонаж может входить/выходить.
6) Далее, движок должен поддерживать два режима работы - улица и помещение. Звук распространяется в здании не так как на улице. Внутри комнаты звук от точечных источников усиливается в (1-a)/a раз, где a - коэффициент поглощения стен. Также наверно меняется и спектр звука, я в это не вникал.
7) Кроме точечных и протяженных источников звука, предлагаю сделать еще особый тип источника звука - переизлучатель. Переизлучатель подсоединяется к точечному источнику, и повторяет его звуки - но в другой точке пространства. Переизлучатель должен устанавливаться в дверном проеме. Смыл в том, что если вы находитесеь на улице и слушаете точечный источник внутри здания, то фактически бОльшая часть звука будет идти не напрямую от источника, а от дверного проема. Таким образом, находясь на улице, вы сможете услышать направление на дверь, а попав внутрь помещения - переизлучатель отключается, и вы слышите уже направление непосредственно на источник звука.
8) Помимо этого, нужно конечно смоделировать движение машин -точечных источников звука. И построить сеть дорог - опять же процедурно. (кстати у меня уже есть код для этого - писал для другого проекта). Здания тоже можно расставить процедурно. Аналогично можно случайно раскидать тайнички внутри зданий. Это будут точечные источники звука, но очень тихие и с ограниченным радиусом слышимости.
9) Нужно смоделировать шаги персонажа по разным поверхностям. Карта местности должна также содержать тип поверхности - асфальт, грунт, бетон, щебень, вода. Кроме того, желательно смоделировать мокрый вариант поверхности и заснеженный.
10) Ну кроме того, нужно сделать какие-то девайсы типа сонара, голосового подсказчика или карты. Тут нужно обдумать.

Ну вот как-то так....
0
jonikster
8 / 8 / 1
Регистрация: 26.10.2014
Сообщений: 829
21.02.2017, 18:39  [ТС] #16
Первый вопрос, а почему 2D?
Ведь в 2D нет поворотов и прочего.
О звуке, я с теорией звука не очень знаком, потому походу придётся изучать для более точного понимания.
Опять же, нет цели сразу реализовывать эту задачу. Надо с чего-то начать и потом к этому придти.
0
Storm23
Эксперт .NETАвтор FAQ
5907 / 3506 / 1309
Регистрация: 11.01.2015
Сообщений: 4,616
Записей в блоге: 31
21.02.2017, 22:00 #17
Цитата Сообщение от jonikster Посмотреть сообщение
Ведь в 2D нет поворотов и прочего.
Как это нет поворотов? Есть повороты в 2D.
А 2D потому что в этой игре третье измерение не нужно. Что нам даст карта высот? Как то это изменит звук? Никак. Зато в 3D сложнее ориентироваться и математика сложнее на порядок будет, а оно надо?
И кроме того я говорю лишь про карту в 2D. Сами объекты могут иметь высоту или находится на какой либо высоте (кроме зданий).
0
jonikster
8 / 8 / 1
Регистрация: 26.10.2014
Сообщений: 829
21.02.2017, 22:18  [ТС] #18
Значит у меня нет представления о 2d и 3d.
Я думаю так, что в 3d это x,y,z, повороты и проч.
2d, x,y нет поворотов.
0
8Observer8
2040 / 1333 / 217
Регистрация: 05.10.2013
Сообщений: 4,235
Записей в блоге: 56
21.02.2017, 22:45 #19
Цитата Сообщение от jonikster Посмотреть сообщение
Значит у меня нет представления о 2d и 3d.
Я думаю так, что в 3d это x,y,z, повороты и проч.
2d, x,y нет поворотов.
Это очень печально, что вы потеряли зрение. Очень сложно объяснять геометрию без наглядных образов, то есть без скриншотов. Я даже не знаю, как вам объяснить, что значит поворот треугольника в плоскости XY. Или что такое поворот вектора в плоскоти XY на определённый угол.
0
Storm23
Эксперт .NETАвтор FAQ
5907 / 3506 / 1309
Регистрация: 11.01.2015
Сообщений: 4,616
Записей в блоге: 31
22.02.2017, 02:15 #20
jonikster,
Вот наваял пример. Очень примитивный.
Для воcпроизедения звука использую библиотеку IrrKlang (это первое что попалось под руку с нужными свойствами, BASS я не использую, потому что он платный).
В програмке моделируется шум улицы и сигнал бипера, который находится в комнате. Пока персонаж снаружи - звук бипера идет из дверного проема, когда персонаж заходит в комнату, бипер начинает звучать со своей истинной позиции. А звук улицы - наоборот - из двери. В общем, пока вы находитесь в помещении, на дверь указывает шум улицы, а когда вы находитесь на улице - на дверь указывает звук бипера.
Также моделируется звук шагов.

Основные классы:
Кликните здесь для просмотра всего текста
C#
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
    class Game
    {
        public static Game Instance { get; set; }
        public ISoundEngine Engine { get; set; }
        public PointF PlayerPosition { get; set; }
        public PointF PlayerLook { get; set; }
        public List<GameSound> Sounds { get; set; } = new List<GameSound>();
        public bool PlayerMoving { get; set; }
 
        public Game()
        {
            Instance = this;
            Engine = new ISoundEngine();
 
            Sounds.Add(new CityNoise());
            Sounds.Add(new Beeper());
            Sounds.Add(new Steps());
 
            PlayerPosition = new PointF(0, -3);
 
            Update();
        }
 
        public void Update()
        {
            foreach (var item in Sounds)
                item.UpdatePosition();
            foreach (var item in Sounds)
                item.UpdateSound();
        }
    }
 
    abstract class GameSound : IDisposable
    {
        protected ISound sound;
 
        public GameSound()
        {
            Init();
        }
 
        public abstract void Init();
        public PointF Position { get; set; } = new PointF(1, 0);
        public float Volume { get; set; } = 1f;
 
        public virtual void UpdatePosition()
        {
        }
 
        public virtual void UpdateSound()
        {
            //direction to sound
            var dir = Position.Sub(Game.Instance.PlayerPosition);
            var len = dir.Length();//distance to sound
            //angle between look and dir to sound
            var a = dir.Angle(Game.Instance.PlayerLook);
            var d = new PointF().InitFromAngle(1, a);
            //adjust sound
            sound.Pan = (float)(d.Y * d.Y * d.Y);
            sound.Volume = Volume * (float)(d.X / 2 + 0.5f + 0.3f) / (1 + (float)Math.Pow(len, 0.7f));
            //Console.WriteLine("Dist to target: " + len);
        }
 
        public void Dispose()
        {
            sound.Dispose();
        }
    }
 
    class CityNoise : GameSound
    {
        public override void Init()
        {
            sound = Game.Instance.Engine.Play2D(AppDomain.CurrentDomain.BaseDirectory + "\\Sounds\\noise-in-the-city.mp3", true);
        }
 
        public override void UpdatePosition()
        {
            if (Game.Instance.PlayerPosition.Y < 0)
            {
                Position = Game.Instance.PlayerPosition.Add(Game.Instance.PlayerLook);
                Volume = 1;
            }
            else
            {
                Position = new PointF(0, 0);
                Volume = 0.6f;
            }
        }
    }
 
    class Beeper : GameSound
    {
        public override void Init()
        {
            sound = Game.Instance.Engine.Play2D(AppDomain.CurrentDomain.BaseDirectory + "\\Sounds\\beep.mp3", true);
        }
 
        public override void UpdatePosition()
        {
            if (Game.Instance.PlayerPosition.Y > 0)
            {
                Position = new PointF(5, 5);
                Volume = 1;
            }
            else
            {
                Position = new PointF(0, 0);
                Volume = 0.1f;
            }
        }
    }
 
    class Steps : GameSound
    {
        public override void Init()
        {
            sound = Game.Instance.Engine.Play2D(AppDomain.CurrentDomain.BaseDirectory + "\\Sounds\\step.mp3", true);
        }
 
        public override void UpdatePosition()
        {
            Position = Game.Instance.PlayerPosition;
 
        }
 
        public override void UpdateSound()
        {
            base.UpdateSound();
            sound.Pan = 0;
            if (Game.Instance.PlayerPosition.Y > 0)
            {
                sound.Volume = 1;
            }
            else
            {
                sound.Volume = 0.5f;
            }
 
            if (!Game.Instance.PlayerMoving)
                sound.Volume = 0;
        }
    }


Управление поворотами - мышка. Вперед - W, назад - S, выход - Esc.
Исходник и exe - в присоединенном файле.
0
Вложения
Тип файла: zip NoiseOfGTA.zip (2.40 Мб, 4 просмотров)
22.02.2017, 02:15
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.02.2017, 02:15
Привет! Вот еще темы с решениями:

Выбор движка/языка
Планирую написать простенькую 2D игрушку, что-то вроде &quot;M.A.R.S - a ridiculous...

Подбор движка для гонок
В связи с огромным выборов движков для игр у меня встал вопрос об выборе движка...

Родная версия движка проекта
Привет всем, кто занимается Unity! Возникла необходимость доделать проект,...

Выбор 2d кроссплатформенного движка для игры
Здравствуйте! В данный момент я пишу игру на питоне. По мере продвижения,...


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

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

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