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=19903)

softcrasoft 09.07.2015 15:48

Как сделать стрельбу
 
Приветствую.
Я уже делал подобную тему, но из-за того что я все описал не так как надо, не получил понятного ответа.
Итак:
У меня есть собственно сам blitz3d.
Там написана не до игра, где спереди меня и чуть левее враг.
Стрелкой вверх я иду вверх, вниз иду вниз.
Влево поворачиваюсь влево, вправо поворачиваюсь вправо.
И вот сам вопрос:
Как сделать стрельбу?
что бы если я повернут прямо к противнику и жал пробел, воспроизводился взук выстрела. И если объект по центру, что бы выполнялся блок, где идет воспроизведение звука крика, и отнятие hp.
Как такие вещи можно сделать?
Если б я не поворачивался а перемещался, я бы сравнивал по оси y. Но с поворотами...
Сразу предупрежу. тригонометрию не знаю.
И прошу кстати туторы различные не предлагать, а описать хотя бы алгоритм по моей задаче.
Удачи!

L-ee-X 09.07.2015 15:52

Ответ: Как сделать стрельбу
 
Открой справку в конце то концов профессионал, изучи хоть не много....
Такое ощущение что тут за тебя игру пишут а ты только как Ген. Директор идеи выдвигаешь, а справку наверное в глаза не видел. Где же твои профессиональные навыки то.

softcrasoft 09.07.2015 16:21

Ответ: Как сделать стрельбу
 
в справку я смотрел в первую очередь. нет там инфы про стрельбу и даже тому подобные вещи. типа функции, которая возвращает в центре ли указанный объект.
По поводу игр, я прошу не код а алгоритм. читайте внимательней

L-ee-X 09.07.2015 16:23

Ответ: Как сделать стрельбу
 
Так в справке этого и не будет. В справке все есть для того чтоб это сделать. Сложного там ни чего нет.

softcrasoft 09.07.2015 16:26

Ответ: Как сделать стрельбу
 
ну вы то может тригонометрию знаете, а я нет. там даже функций для того что бы осуществить нет. ну или по крайней мере я их не нашел.

Nerd 09.07.2015 16:41

Ответ: Как сделать стрельбу
 

L-ee-X 09.07.2015 16:46

Ответ: Как сделать стрельбу
 
Цитата:

Сообщение от Nerd (Сообщение 297473)

Да что толку он найдет её? Следующий вопрос будет и что с ней делать? Как мне написать, какой алгоритм и тд

softcrasoft 09.07.2015 16:56

Ответ: Как сделать стрельбу
 
похоже EntityRoll# это то, но как проверить, направлено ли это объекту. да и вообще ось z это ж вроде вперед. хотя как там ппо тригонометрии я не знаю.

L-ee-X 09.07.2015 16:59

Ответ: Как сделать стрельбу
 
Код:

EntityPickMode entity,pick_geometry[,obscurer]
Параметры
entity - указатель объекта

pick_geometry - тип геометрии, используемой для проверки:
0: не проверяется (по умолчанию)
1: Сфера (используется EntityRadius)
2: Полигоны
3: Куб (используется EntityBox)

obscurer (не обязательно) - True, чтобы установить, что объект перекрывает другие объекты во время выполнения EntityVisible.

Описание
Устанавливает режим проверки для объекта.

Дополнительный параметр obscurer используется с EntityVisible, чтобы создать условия, когда линия взгляда может как бы беспрепятственно пройти между двумя объектами. Это позволяет проверять некоторые объектам с использованием других pick-команд, но игнорировать их (они как бы 'прозрачные') при использовании EntityVisible. Это очень важное свойство EntityVisible.

Пожалуйста, учтите, что только типы Сфера и Куб будут работать со спрайтами Blitz3D. Оопределение полигона возможно только в объекте типа mesh( модель).

Смотрите также: EntityPick, LinePick, CameraPick, EntityPickMode.


L-ee-X 09.07.2015 17:06

Ответ: Как сделать стрельбу
 
Держи, уже почти готовый CoD :-D
PHP код:

Graphics3D 640,480,32,2
SetBuffer BackBuffer
()

Global 
fntArialr
fntArialr
=LoadFont("Arial",24,False,False,False)


Type Dude
    Field entity
,speed#
End Type

Type Dudet
    Field entity2
End Type

Const TYPE_PLAYER=1,Typelevel=2,enti=3,botar=4,enti2=5
Collisions TYPE_PLAYER
,TYPE_PLAYER,1,1

Healthb
=100
Healthig
=100

SchetB
=0
SchetP
=0
 campiv 
CreatePivot() 
 
cam CreateCamera(campiv)
CameraRange cam0.1,200000
EntityType campiv
,TYPE_PLAYER

lit
=CreateLight()

PositionEntity lit,0,20,0
RotateEntity lit
,10,90,0

gun1
=CreateCube()

ScaleEntity gun1,0.04,0.04,0.1
 PointEntity gun1
,campiv
EntityParent gun1
,campiv
EntityParent gun1
,cam 
PositionEntity gun1
,0,-0.15,+0.3
EntityColor gun1
,99,99,103

gunmu
=CreateCube(gun1)
ScaleEntity gunmu,0.1,0.7,0.7
 PointEntity gunmu
,campiv
EntityParent gunmu
,campiv
EntityParent gunmu
,cam 
PositionEntity gunmu
,0,-0.15,+0.40

bot
=CreateCube()
ScaleEntity bot,0.5,0.8,0.5
PositionEntity bot
,0,0,20
EntityColor bot
,0,160,252
EntityType bot
,botar

gol
=CreateSphere(8,bot)
ScaleEntity gol,0.7,0.5,0.7
PositionEntity gol
,0,1.5,0
EntityColor gol
,231,109,0
EntityType gol
,botar

pln
=CreatePlane()

EntityColor pln,205,88,249

PositionEntity pln
,0,-1,0


 cub1
=CreateCube()
EntityColor cub1,42,255,0
PositionEntity cub1
,-3,0,0
ScaleEntity cub1
,0.3,4,20
EntityType cub1
,Typelevel

 cub2
=CreateCube()
EntityColor cub2,42,255,0
PositionEntity cub2
,3,0,0
ScaleEntity cub2
,0.3,4,20
EntityType cub2
,Typelevel

 cub3
=CreateCube()
EntityColor cub3,255,0,0
PositionEntity cub3
,8,0,20
ScaleEntity cub3
,5,4,0.3
EntityType cub3
,Typelevel

 cub4
=CreateCube()
EntityColor cub4,255,0,0
PositionEntity cub4
,-8,0,20
ScaleEntity cub4
,5,4,0.3
EntityType cub4
,Typelevel

cub2
=CreateCube()
EntityColor cub2,255,0,0
PositionEntity cub2
,20,0,0
ScaleEntity cub2
,0.3,4,40
EntityType cub2
,Typelevel


cub2
=CreateCube()
EntityColor cub2,255,0,0
PositionEntity cub2
,-20,0,0
ScaleEntity cub2
,1,4,40
EntityType cub2
,Typelevel

pot
=CreateCube()
ScaleEntity pot,100,0.01,100

EntityColor pot
,255,255,255
PositionEntity pot
,0,4,0

Collisions TYPE_PLAYER
,typelevel,2,2
 
Collisions botar
,typelevel,2,2


Repeat

For d.Dude=Each Dude
        
        MoveEntity d
\entity,0,0,1

If EntityDistance(gun1,d\entity)>200
FreeEntity d
\entity
    Delete d
    
                    
EndIf


    
Next


If bull<MilliSecs()        

        
bul=bul+1                
            
If bul=25 Then bul=0  
        bull
=MilliSecs()+1
    
EndIf
    
    
    
For 
f.Dudet=Each Dudet
        
        MoveEntity f
\entity2,0,0,1

If EntityDistance(bot,f\entity2)>200
FreeEntity f
\entity2
    Delete f
    
                    
EndIf
            
    
Next


If bull2<MilliSecs()        

        
bul2=bul2+1                
            
If bul2=25 Then bul2=0  
        bull2
=MilliSecs()+1
    
EndIf

If 
EntityCollided (bot,Typelevel)

AlignToVector bot,EntityX(bot)-EntityX(campiv),0,EntityZ(bot)+EntityZ(campiv),0,0.6
EndIf 




TurnEntity bot,0,Sgn(DeltaYaw(bot,campiv))*2.3,0
MoveEntity bot
,0,0,0.05
 
If KeyDown(17)  Then 
TFormVector 0
,0,0.2,cam,campiv 
MoveEntity campiv
,TFormedX(),0,TFormedZ() 
EndIf 

If 
KeyDown(31)  Then
TFormVector 0
,0,-0.2,cam,campiv 
MoveEntity campiv
,TFormedX(),0,TFormedZ() 
EndIf 

If 
KeyDown(30)  Then 
MoveEntity  campiv
,-0.2,0,0
EndIf 

If 
KeyDown(32)  Then 
MoveEntity  campiv
,0.2,0,0
EndIf 

If 
KeyDown(57)
CameraZoom cam,2
Else
CameraZoom cam,1
EndIf 




If 
EntityInView(bot,cam)
For 
g=1 To 1
sphere2
=CreateSphere()
ScaleEntity sphere2,0.1,0.1,0.1
RotateEntity sphere2
,10,0,20
If bul2=0
f
.Dudet=New Dudet
    f
\entity2=CopyEntitysphere2 )
    
EntityColor f\entity2,Rnd(255),Rnd(255),Rnd(255)
        
ResetEntity f\entity2
        
    PositionEntity f
\entity2,EntityX#(bot),EntityY#(bot)-0.3,EntityZ(bot) 
RotateEntity f\entity2,EntityPitch#(bot,1),EntityYaw#(bot),0 
EntityType f\entity2,enti2
Collisions enti2
,Typelevel,2,3
Collisions enti2
,TYPE_PLAYER,1,2
EndIf 
Next

If EntityCollided (campiv,enti2)
Healthig=Healthig-1
EndIf



FreeEntity sphere2

EndIf



TurnEntity campiv,0,-MouseXSpeed(),
If EntityCollided (campiv,tulevel
EndIf 


MoveMouse 320,240
 
If Healthb<1
PositionEntity campiv
,0,0,0
PositionEntity bot
,0,0,20
Healthb
=100
Healthig
=100
SchetB
=SchetB+1
EndIf

If 
Healthig<1
PositionEntity campiv
,0,0,0
PositionEntity bot
,0,0,20
Healthb
=100
Healthig
=100
SchetP
=SchetP+1
EndIf

 
UpdateWorld

 RenderWorld

 SetFont fntArialr
    Text 70
,27,"Health"
     
SetFont fntArialr
    Text 70
,67,"Health-Bot="+Healthb
    Text 70
,97,"Health-Player="+Healthig

    
    
    SetFont fntArialr
    Text 500
,27,"Account"
    
SetFont fntArialr
    Text 500
,67,"Bot="+SchetP

SetFont fntArialr
    Text 500
,97,"Player="+SchetB

 Flip

Until KeyHit
(1)


End 

Тут бот стреляет, посмотри код и сделай чтоб Player еще мог стрелять, как ты говоришь АЛГОРИТМ там присутствует... Написал бы да писать лень :)

Andvrok 09.07.2015 17:21

Ответ: Как сделать стрельбу
 
Ты что, он же не код просит, а АЛГОРИТМ.

L-ee-X 09.07.2015 17:29

Ответ: Как сделать стрельбу
 
Правильней наверное условие очередное ему надо написать которое при виде бота и нажатие лкм летела пуля и если столкнулась с объектом то отняла 10 HP. Вот и весь АЛГОРИТМ :))))

softcrasoft 09.07.2015 18:01

Ответ: Как сделать стрельбу
 
сам страуструп говорил, что чужой код - мрак в ночи, а свой код - своя жизнь.
Код я почти полностью не понял.
А по простому алгоритму так:
если нажат пробел, то
проиграть звук выстрела
если какой-то объект равен центру экрана уж не знаю как там это по тригонометрии, то
отнять 20 хп
если хп > 0, то
проиграть (3д) звук крика
end if
если хп <= 0, то
проиграть (3д) звук крика(умер)
end if
end if
то, какая функция возвращает объект в центре экрана, вопрос.

softcrasoft 09.07.2015 18:03

Ответ: Как сделать стрельбу
 
Ботов просто может быть несколько, и не будут же хп отниматься у одного, а стреляю с в другого.

softcrasoft 09.07.2015 18:14

Ответ: Как сделать стрельбу
 
Кстати, вот цитата моего одного знакомого, который занимался блицом:
В 2008 году, я узнал про блиц. тогда бгт специально для аудио игр небыл готов. Была некоторая русская инструкция. тогда я ужасно знал английский. и ради атаки и т.д, мне пришлось лезть на английские форумы, так как на русских нормального ответа не давали. Я с большим трудом разобрался с этим. Много было ошибок, небыло инструкции по решению определенных задач, да и думаю сейчас тож нет.
я б тебе помог, да уже не помню ничего. так как забросил всё в том же 2008 году. так как ответ то я получил, но не полный.
Конец цитаты.
Ребят вот так же сдесь. у вас, в первом сообщении простое условие, а вы сказать функцию которая определяет в центре ли объект, и какой. можно даже без какой, ладно я через фор сделаю проверку сказать не можете.
А представлте вы нуб в этом языке и ничего не знаете? скажете, полезу в справку. ну а если английский не знаешь?


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

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