Форум программистов, компьютерный форум, киберфорум
Наши страницы

Игровые движки

Войти
Регистрация
Восстановить пароль
 
 
jonikster
8 / 8 / 0
Регистрация: 26.10.2014
Сообщений: 807
#1

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

13.02.2017, 16:52. Просмотров 1257. Ответов 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
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Разработка игрового движка (Игровые движки):

Создание игрового движка - Графика и игры
Не могу найти даже немного информации об архитектуре самого простейшего игрового движка (графика на уровне простейших 2d фигур, без...

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

Хорошая ли графика игрового движка ? - Графика и игры
Очень интересно, понравится ли вам это графика ? Если многим понравится, то приступлю к созданию игры на этом движке

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

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

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

40
jonikster
8 / 8 / 0
Регистрация: 26.10.2014
Сообщений: 807
21.02.2017, 18:39  [ТС] #16
Первый вопрос, а почему 2D?
Ведь в 2D нет поворотов и прочего.
О звуке, я с теорией звука не очень знаком, потому походу придётся изучать для более точного понимания.
Опять же, нет цели сразу реализовывать эту задачу. Надо с чего-то начать и потом к этому придти.
0
Storm23
Эксперт .NETАвтор FAQ
5724 / 3459 / 1054
Регистрация: 11.01.2015
Сообщений: 4,581
Записей в блоге: 31
21.02.2017, 22:00 #17
Цитата Сообщение от jonikster Посмотреть сообщение
Ведь в 2D нет поворотов и прочего.
Как это нет поворотов? Есть повороты в 2D.
А 2D потому что в этой игре третье измерение не нужно. Что нам даст карта высот? Как то это изменит звук? Никак. Зато в 3D сложнее ориентироваться и математика сложнее на порядок будет, а оно надо?
И кроме того я говорю лишь про карту в 2D. Сами объекты могут иметь высоту или находится на какой либо высоте (кроме зданий).
0
jonikster
8 / 8 / 0
Регистрация: 26.10.2014
Сообщений: 807
21.02.2017, 22:18  [ТС] #18
Значит у меня нет представления о 2d и 3d.
Я думаю так, что в 3d это x,y,z, повороты и проч.
2d, x,y нет поворотов.
0
8Observer8
2032 / 1321 / 183
Регистрация: 05.10.2013
Сообщений: 4,180
Записей в блоге: 56
21.02.2017, 22:45 #19
Цитата Сообщение от jonikster Посмотреть сообщение
Значит у меня нет представления о 2d и 3d.
Я думаю так, что в 3d это x,y,z, повороты и проч.
2d, x,y нет поворотов.
Это очень печально, что вы потеряли зрение. Очень сложно объяснять геометрию без наглядных образов, то есть без скриншотов. Я даже не знаю, как вам объяснить, что значит поворот треугольника в плоскости XY. Или что такое поворот вектора в плоскоти XY на определённый угол.
0
Storm23
Эксперт .NETАвтор FAQ
5724 / 3459 / 1054
Регистрация: 11.01.2015
Сообщений: 4,581
Записей в блоге: 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 просмотров)
jonikster
8 / 8 / 0
Регистрация: 26.10.2014
Сообщений: 807
22.02.2017, 07:24  [ТС] #21
Спасибо, гляну сейчас, как рас хотел использовать эту замечательную библиотеку. Её обсуждали у нас на форуме по разработке аудио игр.

Добавлено через 14 минут
При запуске вылетает:
[Window Title]
NoiseOfGTA

[Main Instruction]
Прекращена работа программы "NoiseOfGTA"

[Content]
Windows может провести поиск способа устранения этой ошибки в Интернете.

[V] Показать подробности проблемы [Искать решение проблемы в Интернете и закрыть программу] [Закрыть программу] [Отладить программу]
Попробовал скомпилировать, тоже самое.
Попробую сейчас вставить свой irrKlang-64bit-1.5.0, но не уверен.
0
Storm23
Эксперт .NETАвтор FAQ
5724 / 3459 / 1054
Регистрация: 11.01.2015
Сообщений: 4,581
Записей в блоге: 31
22.02.2017, 10:02 #22
jonikster,
Вот пересобрал под x64.
0
Вложения
Тип файла: zip NoiseOfGTAx64.zip (2.94 Мб, 2 просмотров)
jonikster
8 / 8 / 0
Регистрация: 26.10.2014
Сообщений: 807
22.02.2017, 10:29  [ТС] #23
Работает, вернусь после флюографии проверю в наушниках.
Кстати, меня удивил код. Вы такую громадину чтоли сами полностью писали? Или есть какой то шаблон?
0
Storm23
Эксперт .NETАвтор FAQ
5724 / 3459 / 1054
Регистрация: 11.01.2015
Сообщений: 4,581
Записей в блоге: 31
22.02.2017, 14:12 #24
Цитата Сообщение от jonikster Посмотреть сообщение
Вы такую громадину чтоли сами полностью писали?
Ну за меня код никто не напишет, к сожалению
Хотя не знаю, что там такого громадного вы нашли. Классы PointFHelper и Keyboard - я взял свои, но готовые, я их везде применяю, там стандартные операции. Остальной код - спецом для данной програмки писал.
Только обратите внимание, это конечно не движок. Это прототип движка. Просто для демонстрации того, что я предлагаю сделать и как оно приблизительно будет работать. Движок займет больше времени и перед тем как его писать, нужно конечно убедиться, что подходит сам принцип.
0
jonikster
8 / 8 / 0
Регистрация: 26.10.2014
Сообщений: 807
23.02.2017, 18:48  [ТС] #25
просто там в одном из файлов я видел 7000 символов

Добавлено через 22 часа 15 минут
А вы можете описать алгоритм работы вашего примера?
0
Storm23
Эксперт .NETАвтор FAQ
5724 / 3459 / 1054
Регистрация: 11.01.2015
Сообщений: 4,581
Записей в блоге: 31
23.02.2017, 22:40 #26
Цитата Сообщение от jonikster Посмотреть сообщение
А вы можете описать алгоритм работы вашего примера?
Не понимаю, зачем вам алгоритм? Это просто прототип, я его сделал просто что бы послушать как это будет работать.
Нет там никакого алгоритма, просто громкость звука меняется в зависимости от расстояния до источника и от направления "взгляда" персонажа.
Впрочем, судя по скорости вашей реакции вам разработка не очень интересна. С таким настроем игры не делаются, жаль...
0
jonikster
8 / 8 / 0
Регистрация: 26.10.2014
Сообщений: 807
23.02.2017, 23:31  [ТС] #27
Нет, просто я прохожу мед обследование, не у компа.
О алгоритме, просто я саму библиотеку не очень хорошо знаю, потому спросил.
И плюс мне интересно как это пропадает звук фона. Как такое сделать в алгоритме даже не понимаю.
0
Storm23
Эксперт .NETАвтор FAQ
5724 / 3459 / 1054
Регистрация: 11.01.2015
Сообщений: 4,581
Записей в блоге: 31
24.02.2017, 19:51 #28
Цитата Сообщение от jonikster Посмотреть сообщение
О алгоритме, просто я саму библиотеку не очень хорошо знаю, потому спросил.
Там от библиотеки требуется только способность воспроизводить аудиофайлы. Я только использую два свойства Volume (громкость) и Pan (баланс каналов). Все, больше ничего и не нужно.
Цитата Сообщение от jonikster Посмотреть сообщение
И плюс мне интересно как это пропадает звук фона. Как такое сделать в алгоритме даже не понимаю.
Очень просто - если перс входит в комнату - уменьшаем Volume звука улицы. Если выходит - возвращаем Volume. Но там работает немного сложнее, потому что меняется не только громкость но и направление звука - оно всегда на дверь.

Мне было бы интересно услышать ваше мнение о том, можно ли с таким звуком ориентироваться в пространстве? Потому что в реальности звук распространяется немного не так. Но если моделировать как он распространяется в реальности, то потеряется игровой момент, и вы скорее всего не сможете нормально ориентироваться.
0
jonikster
8 / 8 / 0
Регистрация: 26.10.2014
Сообщений: 807
24.02.2017, 22:04  [ТС] #29
Ориентироваться можно, звук супер, главное всё продумать внутри. Я сейчас боюсь по поводу алгоритмов и прочего, ибо я думаю, что тот же пример что вы написали, я не напишу. Уже даже когда пытался пересобрать проект с нуля ошибки выскакивали.
0
Storm23
Эксперт .NETАвтор FAQ
5724 / 3459 / 1054
Регистрация: 11.01.2015
Сообщений: 4,581
Записей в блоге: 31
24.02.2017, 23:07 #30
Цитата Сообщение от jonikster Посмотреть сообщение
Ориентироваться можно, звук супер, главное всё продумать внутри. Я сейчас боюсь по поводу алгоритмов и прочего, ибо я думаю, что тот же пример что вы написали, я не напишу. Уже даже когда пытался пересобрать проект с нуля ошибки выскакивали.
Так а зачем вам его писать? Я предлагаю сотрудничество. Я могу написать движок на физическом уровне. А наружу оставить высокоуровневые скрипты. А вы же возьмете на себя написание скриптов вместе с элементарным сюжетом. Плюс с вас звуки. Конечно я могу где-то накопать звуки сам. Но все таки игра полностью основанная на звуках требует очень много и очень качественного звука.
Что касается движка, то тут нужно как минимум два уровня абстракции. На самом низком будет моделироваться физика, направление звука, звуковая тень от зданий и так далее. Я люблю такие задачки и мне бы было интересно такое сделать. А второй уровень абстракции подразумевает работу в стиле - поместить точечный источник звука вот сюда, разместить здание вот здесь, разместить дверь вот здесь, разместить тайник вот здесь, если перс подходит сюда, то изменить звук на вот этот и так далее. То есть это уже относится к скриптам, работе с картой, дизайном уровней и игровой логикой. Я могу реализовать этот язык (это может быть и C#, а может быть и специальнгый скриптовый язык, на ваш выбор), но сами скрипты у меня писать таланта особого нет.
0
24.02.2017, 23:07
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.02.2017, 23:07
Привет! Вот еще темы с ответами:

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

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

Создание 2D игр без использования движка - Графика и игры
Подскажите где можно найти много инфы по этой теме. Подойдут недоделанные до конца проекты, и исходники и экзешники, просто полезное чтиво....

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


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

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

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