forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   Стрельба в игре (http://forum.boolean.name/showthread.php?t=19750)

RegIon 21.03.2015 16:35

Ответ: Стрельба в игре
 
Если ты так решил аудио-игру, то тебе нужен 3d звук, делается через CreatListener , Load3DSound , EmitSound
Пример: http://www.blitzbasic.com/codearcs/codearcs.php?code=26

Артем Валерьевич 21.03.2015 17:57

Ответ: Стрельба в игре
 
человек же пишет он незрячий, а вы ему читай тутор....

softcrasoft 21.03.2015 18:02

Ответ: Стрельба в игре
 
Ой Господи! Да знаю я про 3d звук! Я поэтому и выбрал blitz3d знакомые посоветовали, потому что там не нужны эти тупые вычисления! А вот со стрельбой я таки не пойму,ю если не разберусь, я оч расстроюсь, т.к у меня тока на блиц надежда

LLI.T.A.L.K.E.R. 21.03.2015 18:47

Ответ: Стрельба в игре
 
Для начала лучше использовать звуковой движок Blitz BASS 1.7 или поглядеть на Russian Sound System
Так как встроенное в Blitz 3д позиционирование звука ооочень примитивно.

Arton 21.03.2015 19:31

Ответ: Стрельба в игре
 
Цитата:

Сообщение от LLI.T.A.L.K.E.R. (Сообщение 294429)
Для начала лучше использовать звуковой движок Blitz BASS 1.7 или поглядеть на Russian Sound System
Так как встроенное в Blitz 3д позиционирование звука ооочень примитивно.

Нет, Bass слишком старый, полностью корректно врапер работал только на XP.
На мой взгляд, оптимальный вариант BlitzAL (оу... сайт mirage-lab.com сдох)
Почему? Там проще всего разобраться.

BlitzAL.zip
Обновлённая dll, если не ошибаюсь многопоточная.

Цитата:

Russian Sound System
Разве она готова?

P. S.
Цитата:

Сообщение от softcrasoft (Сообщение 294428)
потому что там не нужны эти тупые вычисления!

Тупые вычисления нужны везде.

softcrasoft 21.03.2015 19:55

Ответ: Стрельба в игре
 
Мне, примитивность и нужна!
Чтоб было прощеделать звуковую игру типа call of duty,ю но в открытом пространстве.
Я ща насчет стрельбы переживаю, а больше ничего не волнует

Arton 21.03.2015 20:04

Ответ: Стрельба в игре
 
Цитата:

Сообщение от softcrasoft (Сообщение 294433)
Чтоб было прощеделать звуковую игру типа call of duty,ю но в открытом пространстве.

CoD не примитивен (техническая сторона), на открытом пространстве ещё больше проблем.

softcrasoft 21.03.2015 20:12

Ответ: Стрельба в игре
 
Вообщем нужно такое:
Поле 50 на 50
там враги
все как в COd, но без зданий, укрытий, чтоб кто играет из незрячих было проще
делать куб я умею
работа со звуком тоже
осталось понять как делать карту 50 на 50
и как сделать стрельбу.

LLI.T.A.L.K.E.R. 21.03.2015 20:25

Ответ: Стрельба в игре
 
Готовый проект:
(потребуется BlitzBASS1.7)

https://www.dropbox.com/s/p0g70w0huj9iqqw/Game.rar?dl=0
Код:

Include "Includes\Bass.bb"

Width=800 : Height=600
Width2=Width/2 : Height2=Height/2        ;для середины экрана
Graphics3D Width,Height,32,2

;пояснения
;Type EnemyType        ;для массива врагов
;        Field ent        ;для модели врага
;        Field hp%        ;для здоровья врага
;        Field idle_delay        ;как часто враг будет говорить

Type EnemyType
        Field ent
        Field hp%
        Field idle_delay
End Type

BASS_Init(-1,44100,BASS_DEVICE_3D,0,BASS_NULL)
BASS_CheckVersion()
BASS_Set3DFactors(-1,0.5,-1)
BASS_Apply3D()

Camera=CreateCamera()

Dim IdleSnd(3)        ;рандомный массив голосов
Dim CrySnd(3)        ;рандомный массив плача

IdleNum=1        ;переменная чтобы следить, чтобы враги не повторяли фразы
IdleSnd(1)=BASS_StreamCreateFile(0,"Sounds\idle1.wav",0,0,BASS_SAMPLE_3D)
BASS_ChannelSetAttributes(IdleSnd(1),-1,200,-1)
IdleSnd(2)=BASS_StreamCreateFile(0,"Sounds\idle2.wav",0,0,BASS_SAMPLE_3D)
BASS_ChannelSetAttributes(IdleSnd(2),-1,200,-1)
IdleSnd(3)=BASS_StreamCreateFile(0,"Sounds\idle3.wav",0,0,BASS_SAMPLE_3D)
BASS_ChannelSetAttributes(IdleSnd(3),-1,200,-1)

CrySnd(1)=BASS_StreamCreateFile(0,"Sounds\Cry1.wav",0,0,BASS_SAMPLE_3D)
BASS_ChannelSetAttributes(CrySnd(1),-1,200,-1)
CrySnd(2)=BASS_StreamCreateFile(0,"Sounds\Cry2.wav",0,0,BASS_SAMPLE_3D)
BASS_ChannelSetAttributes(CrySnd(2),-1,200,-1)
CrySnd(3)=BASS_StreamCreateFile(0,"Sounds\Cry3.wav",0,0,BASS_SAMPLE_3D)
BASS_ChannelSetAttributes(CrySnd(3),-1,200,-1)

DieSnd=BASS_StreamCreateFile(0,"Sounds\die.wav",0,0,BASS_SAMPLE_3D)
BASS_ChannelSetAttributes(DieSnd,-1,200,-1)

For i=1 To 5        ;создадим 5 врагов
        Enemy.EnemyType=New EnemyType
        Enemy\ent=CreateCube()
        PositionEntity Enemy\ent,Rnd(-100,100),0,Rnd(-100,100)
        EntityPickMode Enemy\ent,2        ;делаем врага выбираемым
        NameEntity Enemy\ent,Handle(Enemy)        ;называем модель врага ссылкой на ячейку врага
        Enemy\hp=100
        Enemy\idle_delay=Rand(300,1000)        ;через сколько враг будет выговаривать фразу
Next

Const FPS%=60
period=1000/FPS
time=MilliSecs()-period

While Not KeyHit(1)

Repeat        ;FPS limit
elapsed=MilliSecs()-time
Until elapsed
ticks=elapsed/period
tween#=Float(elapsed Mod period)/Float(period)
For k=1 To ticks        ;FPS limit
time=time+period
       
        Speed=1        ;для ускорения при нажатом Shift
        If KeyDown(42) Then Speed=2
       
        If KeyDown(200) Then MoveEntity Camera,0,0,0.1*Speed        ;камера вперёд
        If KeyDown(208) Then MoveEntity Camera,0,0,-0.1*Speed        ;камера назад
       
        If KeyDown(203) Then TurnEntity Camera,0,1*Speed,0                ;камера влево
        If KeyDown(205) Then TurnEntity Camera,0,-1*Speed,0                ;камера вправо
       
        If KeyHit(57) Then
                CameraPick(Camera,Width2,Height2)        ;проверяем выборку по центру экрана
                ent=PickedEntity()        ;присваиваем к ent что мы выбрали
                If ent<>0 Then        ;если что-то выбрали
                        If EntityDistance(ent,Camera)<10 Then        ;если враг ближе 10 метров
                                Enemy.EnemyType=Object.EnemyType(EntityName(ent))        ;берём из имени ссылку на ячейку врага
                                Enemy\hp=Enemy\hp-25        ;вычитываем 25 здоровья
                               
                                CryNum%=Rand(1,3)        ;выбираем разный номер плача
                                BASS_ChannelSet3DPositionPos(CrySnd(CryNum),EntityX(Enemy\ent),EntityY(Enemy\ent),EntityZ(Enemy\ent)) ;помещаем звук плача где находится враг
                                BASS_ChannelPlay(CrySnd(CryNum),True)        ;играем звук плач
                               
                                If Enemy\hp<1 Then        ;если у врага нет жизней
                                        BASS_ChannelSet3DPositionPos(DieSnd,EntityX(Enemy\ent),EntityY(Enemy\ent),EntityZ(Enemy\ent)) ;помещаем звук смерти где находится враг
                                        BASS_ChannelPlay(DieSnd,True)        ;играем звук смерти
                                       
                                        FreeEntity Enemy\ent        ;удаляем его модель
                                        Delete Enemy        ;удаляем врага
                                EndIf
                        EndIf
                EndIf
        EndIf
       
        For Enemy.EnemyType=Each EnemyType        ;цикл для каждого из врагов
                Enemy\idle_delay=Enemy\idle_delay-1
               
                If Enemy\idle_delay<1 Then        ;если задержка для говора закончилась
                        Enemy\idle_delay=Rand(300,1000)        ;через сколько враг будет выговаривать фразу
                       
                        IdleNum=IdleNum+1        ;выбираем следующий номер фразы
                        If IdleNum>3 Then IdleNum=1
                        BASS_ChannelSet3DPositionPos(IdleSnd(IdleNum),EntityX(Enemy\ent),EntityY(Enemy\ent),EntityZ(Enemy\ent)) ;помещаем звук где находится враг
                        BASS_ChannelPlay(IdleSnd(IdleNum),True)        ;играем звук говора
                EndIf
        Next
       
        BASS_Update3DListener(Camera)        ;обновляем звуковую позицию камеры
        BASS_Apply3D()        ;применяем
       
        UpdateWorld()
Next ;end FPS limit

RenderWorld()
Flip()

Wend

End


softcrasoft 21.03.2015 20:32

Ответ: Стрельба в игре
 
а что такое blitzbase? и как я вижу там труднее со звуком, а мне желательно пример на blitz3d так как ео я изучал

LLI.T.A.L.K.E.R. 21.03.2015 20:42

Ответ: Стрельба в игре
 
Всё остальное доступно в обучающих материалах Blitz3D.
Я быстренько выпилил часть нароботок из текущей своей игры.


Часовой пояс GMT +4, время: 14:09.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot