Форум программистов, компьютерный форум, киберфорум
Программирование игр
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
55 / 13 / 2
Регистрация: 26.10.2014
Сообщений: 1,108
1

Библиотеки или собственный движок

20.03.2018, 10:01. Показов 2512. Ответов 73
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте.
Раньше, я долго выбирал язык программирования для разработки игр. В итоге, несколько месяцев назад выбрал C++ и Java. Я выбирал долго между этими двумя языками, в итоге, решил учить оба. И сейчас не жалею.
Сейчас я более менее вспомнил основы C++ и изучил основы Java. Хочу что-то начать делать, и столкнулся с проблемой.
Дело в том, что я хочу разрабатывать звуковые игры. Такие же, как видео игры, но без графики. А все движки и библиотеки строятся на графике.
Вопрос:
Существуют ли библиотеки, где реализация игрока не через спрайт, а через объект с параметрами координатами и т.д.
Например класс игрока с координатами. Класс player, поля x, y, z И т.д.
Если нет, что можете посоветовать? То есть писать всё на графике, писать собственный движок или что ещё?
Написать собственный движок не проблема в плане звуковой игры, реализации менюшки. Но, я например хочу реализовать игру как Call Of Duty. Шутер. А игровые движки и библиотеки содержат физику и другие упрощающие элементы. Самостоятельно которые я не реализую по причине отсутствия знаний высшей математики.
Что можете посоветовать?
Заранее благодарен!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.03.2018, 10:01
Ответы с готовыми решениями:

Движок для игр SFML. Не получается подключить библиотеки
watch?v=CVYjVCuPuY4 Всё делаю как в видео. В итоге при попытке сомпилить пример:

DirectX или готовый игровой движок?
Хочу делать игры, поэтому изучаю DirectX. Но большинство говорят, что лучше использовать готовый...

Написать свой движок или воспользоваться существующим?
Доброго времени суток, уважаемые форумчане! Работаю в игровом движке Unity3D уже полтора года....

Ищу игровой движок или конструктор для новичка
Здравствуйте, есть задумка игры и даже не одной, но реализовать её с помощью сложных игровых...

73
5158 / 2770 / 465
Регистрация: 05.10.2013
Сообщений: 7,321
Записей в блоге: 147
27.03.2018, 11:54 61
Author24 — интернет-сервис помощи студентам
Цитата Сообщение от 8Observer8 Посмотреть сообщение
В папке "lib" лежат две папки: "jars" и "natives". Их нужно подключить для этого нужно открыть правой кнопкой кликнуть по проекту, в выпадающем меню выбрать "Build Path", в новом выпадающем меню выбрать "Configure Build Path", открыть вкладку "Libraries"
Подключаем файлы из папки "jars". Нужно справа нажать кнопку "Add JARs...". Появится окно, где нужно добраться до папки "lib/jars", выделить все три файла, нажать кнопку "ОК"

Подключаем папку "natives". Для этого на вкладке "Libraries" раскрываем выпадающий список "JRE System Library", выбираем "Native library location", справа нажимаем кнопку "Edit", появляется окно, где нужно выбрать папку "lib/natives"

Нажимаем кнопку "Apply and Close"
0
55 / 13 / 2
Регистрация: 26.10.2014
Сообщений: 1,108
27.03.2018, 16:51  [ТС] 62
Pavel_Srgv, угу, никогда, вообще никогда, просто читая первый том Хорстманна пускал всё почему-то через консоль, а так никогда.
0
5158 / 2770 / 465
Регистрация: 05.10.2013
Сообщений: 7,321
Записей в блоге: 147
27.03.2018, 16:55 63
jonikster, не забудьте отписаться, получилось ли у вас сделать, что я написал, я тогда напишу, что сделать дальше
0
55 / 13 / 2
Регистрация: 26.10.2014
Сообщений: 1,108
27.03.2018, 17:04  [ТС] 64
8Observer8, сделал.
0
5158 / 2770 / 465
Регистрация: 05.10.2013
Сообщений: 7,321
Записей в блоге: 147
27.03.2018, 17:23 65
Нужно кликнуть правой кнопкой по папке "src", выбрать "New", выбрать "Package", ввести имя: audio, нажать кнопку "Finish"

Из архива Audio3D.zip из папки "src/audio" нужно скопировать все файлы: "bounce.wav", "AudioMaster.java", "Source.java", "Test.java" в папку "src/audio" вашего проекта (открыть папку вашего проекта можно правой кнопкой по имени проета, выбрать "Show In", выбрать "System Explorer"). Нажать F5 - для обновления файлов проекта.

Запустить проект. Eclipse предложит выбрать приложение. Нужно выбрать "Test - audio". Нажать ОК
0
55 / 13 / 2
Регистрация: 26.10.2014
Сообщений: 1,108
27.03.2018, 17:48  [ТС] 66
Не, ошибка та же:
The selection cannot be launched, and there are no recent launches.
Мой знакомый сказал, что где-то в настройках проекта, нужно выбрать главный класс, но он сказал, что странно, что класс с мейном сам не запустился

Добавлено через 10 минут
Скажите, какой класс главный? Я просто выбиру в параметрах запуска

Добавлено через 4 минуты
Я открыл ваш проект и запустил класс с мейном. Всё сработало. Но переделанный проект я так и не запустил.
Звук идёт с права на лево и уходит.
0
Заблокирован
27.03.2018, 17:50 67
Цитата Сообщение от jonikster Посмотреть сообщение
но он сказал, что странно, что класс с мейном сам не запустился
Реальный мир-таки победил твоего знакомого Добро пожаловать в мир без IDE и прочих приблуд для домохозяек.
0
5158 / 2770 / 465
Регистрация: 05.10.2013
Сообщений: 7,321
Записей в блоге: 147
27.03.2018, 17:55 68
Цитата Сообщение от jonikster Посмотреть сообщение
Скажите, какой класс главный? Я просто выбиру в параметрах запуска
Метод main находится в Test.java

Цитата Сообщение от jonikster Посмотреть сообщение
Звук идёт с права на лево и уходит.
Я ещё какой-нибудь пример придумаю и скину для теста
0
55 / 13 / 2
Регистрация: 26.10.2014
Сообщений: 1,108
27.03.2018, 18:15  [ТС] 69
Угу, я пока покапаю сам джавовский API, и постепенно буду идти к андроиду
0
136 / 131 / 43
Регистрация: 07.11.2017
Сообщений: 553
27.03.2018, 18:18 70
Цитата Сообщение от jonikster Посмотреть сообщение
и постепенно буду идти к андроиду
вы джаву освойте уверенно)
а уж потом к андроиду переходите.
а то вы так не научитесь толком ничего делать, сплошные костыли будут.
0
55 / 13 / 2
Регистрация: 26.10.2014
Сообщений: 1,108
27.03.2018, 18:34  [ТС] 71
f3hler, без знания алгоритмов и чтения литературы по ним костыли и так будут.
0
5158 / 2770 / 465
Регистрация: 05.10.2013
Сообщений: 7,321
Записей в блоге: 147
28.03.2018, 09:39 72
Цитата Сообщение от jonikster Посмотреть сообщение
я пока покапаю сам джавовский API
Не лишним будет покопать openal-овский API в спецификации: openal-1.1-specification.pdf

Цитата Сообщение от jonikster Посмотреть сообщение
Звук идёт с права на лево и уходит.
В этом примере есть проблема. Как бы далеко источник звука не улетел бы от слушателя - всегда слышен звук. Это неправильно. Звук должен пропасть полностью при какой-то определённой дистанции между слушателем и источником. А до пропадания он должен затухать.

Нужно добавить в конструктор источника звука (файл Source.java) следующие строки:
Java
1
2
AL10.alSourcef(sourceId, AL10.AL_REFERENCE_DISTANCE, 3);
AL10.alSourcef(sourceId, AL10.AL_MAX_DISTANCE, 20);
Здесь устанавливается радиус 3, на котором звук имеет значение громкости равное 1. И дистанция = 20, до которой громкость звука падает линейно (после дистанции равной 20 звук от источника не слышен). Для задания линейной модели затухания звука нужно в файле Test.java в main добавить строку:
Java
1
AL10.alDistanceModel(AL11.AL_LINEAR_DISTANCE_CLAMPED);
Весь проект: DistanceFromSource.zip

Файлы, в которых были изменения:

Source.java
Java
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
package audio;
 
import org.lwjgl.openal.AL10;
 
public class Source {
    
    private int sourceId;
    
    public Source() {
        sourceId = AL10.alGenSources();
        
        AL10.alSourcef(sourceId, AL10.AL_REFERENCE_DISTANCE, 3);
        AL10.alSourcef(sourceId, AL10.AL_MAX_DISTANCE, 20);
    }
    
    public void play(int buffer) {
        stop();
        AL10.alSourcei(sourceId, AL10.AL_BUFFER, buffer);
        continuePlaying();
    }
 
    public void delete() {
        stop();
        AL10.alDeleteSources(sourceId);
    }
    
    public void pause() {
        AL10.alSourcePause(sourceId);
    }
    
    public void continuePlaying() {
        AL10.alSourcePlay(sourceId);
    }
    
    public void stop() {
        AL10.alSourceStop(sourceId);
    }
    
    public void setVelocity(float x, float y, float z) {
        AL10.alSource3f(sourceId, AL10.AL_VELOCITY, x, y, z);
    }
    
    public void setLooping(boolean loop) {
        AL10.alSourcei(sourceId, AL10.AL_LOOPING, loop ? AL10.AL_TRUE : AL10.AL_FALSE);
    }
    
    public boolean isPlaying() {
        return AL10.alGetSourcei(sourceId, AL10.AL_SOURCE_STATE) == AL10.AL_PLAYING;
    }
 
    public void setVolume(float volume) {
        AL10.alSourcef(sourceId, AL10.AL_GAIN, volume);
    }
    
    public void setPitch(float pitch) {
        AL10.alSourcef(sourceId, AL10.AL_PITCH, pitch);
    }
    
    public void setPosition(float x, float y, float z) {
        AL10.alSource3f(sourceId, AL10.AL_POSITION, x, y, z);
    }
}
Test.java
Java
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
package audio;
 
import java.io.IOException;
 
import org.lwjgl.openal.AL10;
import org.lwjgl.openal.AL11;
 
public class Test {
 
    public static void main(String[] args) throws IOException, InterruptedException {
 
        AudioMaster.init();
        AudioMaster.setListenerData(0, 0, 0);
        AL10.alDistanceModel(AL11.AL_LINEAR_DISTANCE_CLAMPED);
 
        int buffer = AudioMaster.loadSound("audio/bounce.wav");
        Source source = new Source();
        source.setLooping(true);
        source.play(buffer);
 
        float xPos = 8;
        source.setPosition(xPos, 0, 2);
 
        char c = ' ';
        while (c != 'q') {
 
            xPos -= 0.03f;
            source.setPosition(xPos, 0, 2);
            System.out.println(xPos);
            Thread.sleep(10);
        }
 
        source.delete();
        AudioMaster.cleanUp();
 
    }
 
}
0
3881 / 2479 / 418
Регистрация: 09.09.2017
Сообщений: 10,888
28.03.2018, 11:27 73
Цитата Сообщение от 8Observer8 Посмотреть сообщение
И дистанция = 20, до которой громкость звука падает линейно
Почему линейно а не обратно-квадратично? Быть не может чтобы это было сложно для машины, зато ближе к реальности.
0
5158 / 2770 / 465
Регистрация: 05.10.2013
Сообщений: 7,321
Записей в блоге: 147
28.03.2018, 12:42 74
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Почему линейно а не обратно-квадратично? Быть не может чтобы это было сложно для машины, зато ближе к реальности.
Чтобы в OpenAL сменить модель затухания c линейной на обратно-квадратичную, нужно вместо этой строки:
Java
1
AL10.alDistanceModel(AL11.AL_LINEAR_DISTANCE_CLAMPED);
Написать:
Java
1
AL10.alDistanceModel(AL10.AL_INVERSE_DISTANCE_CLAMPED);
Если нужно экспонинциальное затухание, то:
Java
1
AL10.alDistanceModel(AL11.AL_EXPONENT_DISTANCE_CLAMPED);
0
28.03.2018, 12:42
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.03.2018, 12:42
Помогаю со студенческими работами здесь

Собственный движок браузера
Подскажите,как написать собственный движок для браузера? т.е. в стандартных средствах vs,можно...

Собственный движок для форума
Мужики =) Хочу написать собственный движок для форума.Подскажите что нужно изучать и вообще с чего...

Нужно ли писать собственный движок?
Здравствуйте, меня интересует вопрос, писать ли свой сайт вручную на пхп, или же все таки лучше...

Хочу написать собственный простенький 3d движок с генерацией карты
Я студент 4-го курса. Для защиты диплома нужно написать простенький, но свой 3d движок с генерацией...


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

Или воспользуйтесь поиском по форуму:
74
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru