|
3D-программирование Вопросы, касающиеся программирования 3D мира |
09.07.2015, 15:48
|
#1
|
Знающий
Регистрация: 21.03.2015
Сообщений: 262
Написано 6 полезных сообщений (для 7 пользователей)
|
Как сделать стрельбу
Приветствую.
Я уже делал подобную тему, но из-за того что я все описал не так как надо, не получил понятного ответа.
Итак:
У меня есть собственно сам blitz3d.
Там написана не до игра, где спереди меня и чуть левее враг.
Стрелкой вверх я иду вверх, вниз иду вниз.
Влево поворачиваюсь влево, вправо поворачиваюсь вправо.
И вот сам вопрос:
Как сделать стрельбу?
что бы если я повернут прямо к противнику и жал пробел, воспроизводился взук выстрела. И если объект по центру, что бы выполнялся блок, где идет воспроизведение звука крика, и отнятие hp.
Как такие вещи можно сделать?
Если б я не поворачивался а перемещался, я бы сравнивал по оси y. Но с поворотами...
Сразу предупрежу. тригонометрию не знаю.
И прошу кстати туторы различные не предлагать, а описать хотя бы алгоритм по моей задаче.
Удачи!
|
(Offline)
|
|
09.07.2015, 15:52
|
#2
|
Разработчик
Регистрация: 06.06.2011
Адрес: Ирк. обл.
Сообщений: 541
Написано 133 полезных сообщений (для 220 пользователей)
|
Ответ: Как сделать стрельбу
Открой справку в конце то концов профессионал, изучи хоть не много....
Такое ощущение что тут за тебя игру пишут а ты только как Ген. Директор идеи выдвигаешь, а справку наверное в глаза не видел. Где же твои профессиональные навыки то.
__________________
|
(Offline)
|
|
09.07.2015, 16:21
|
#3
|
Знающий
Регистрация: 21.03.2015
Сообщений: 262
Написано 6 полезных сообщений (для 7 пользователей)
|
Ответ: Как сделать стрельбу
в справку я смотрел в первую очередь. нет там инфы про стрельбу и даже тому подобные вещи. типа функции, которая возвращает в центре ли указанный объект.
По поводу игр, я прошу не код а алгоритм. читайте внимательней
|
(Offline)
|
|
09.07.2015, 16:23
|
#4
|
Разработчик
Регистрация: 06.06.2011
Адрес: Ирк. обл.
Сообщений: 541
Написано 133 полезных сообщений (для 220 пользователей)
|
Ответ: Как сделать стрельбу
Так в справке этого и не будет. В справке все есть для того чтоб это сделать. Сложного там ни чего нет.
__________________
|
(Offline)
|
|
09.07.2015, 16:26
|
#5
|
Знающий
Регистрация: 21.03.2015
Сообщений: 262
Написано 6 полезных сообщений (для 7 пользователей)
|
Ответ: Как сделать стрельбу
ну вы то может тригонометрию знаете, а я нет. там даже функций для того что бы осуществить нет. ну или по крайней мере я их не нашел.
|
(Offline)
|
|
09.07.2015, 16:41
|
#6
|
Чудо-кот
Регистрация: 22.02.2011
Сообщений: 901
Написано 480 полезных сообщений (для 1,471 пользователей)
|
Ответ: Как сделать стрельбу
|
(Offline)
|
|
09.07.2015, 16:46
|
#7
|
Разработчик
Регистрация: 06.06.2011
Адрес: Ирк. обл.
Сообщений: 541
Написано 133 полезных сообщений (для 220 пользователей)
|
Ответ: Как сделать стрельбу
Сообщение от Nerd
|
Да что толку он найдет её? Следующий вопрос будет и что с ней делать? Как мне написать, какой алгоритм и тд
__________________
|
(Offline)
|
|
09.07.2015, 16:56
|
#8
|
Знающий
Регистрация: 21.03.2015
Сообщений: 262
Написано 6 полезных сообщений (для 7 пользователей)
|
Ответ: Как сделать стрельбу
похоже EntityRoll# это то, но как проверить, направлено ли это объекту. да и вообще ось z это ж вроде вперед. хотя как там ппо тригонометрии я не знаю.
|
(Offline)
|
|
09.07.2015, 16:59
|
#9
|
Разработчик
Регистрация: 06.06.2011
Адрес: Ирк. обл.
Сообщений: 541
Написано 133 полезных сообщений (для 220 пользователей)
|
Ответ: Как сделать стрельбу
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.
__________________
|
(Offline)
|
|
09.07.2015, 17:06
|
#10
|
Разработчик
Регистрация: 06.06.2011
Адрес: Ирк. обл.
Сообщений: 541
Написано 133 полезных сообщений (для 220 пользователей)
|
Ответ: Как сделать стрельбу
Держи, уже почти готовый CoD
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 cam, 0.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=CopyEntity( sphere2 ) 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(),0 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 еще мог стрелять, как ты говоришь АЛГОРИТМ там присутствует... Написал бы да писать лень
__________________
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
09.07.2015, 17:21
|
#11
|
Бывалый
Регистрация: 26.07.2009
Сообщений: 785
Написано 362 полезных сообщений (для 995 пользователей)
|
Ответ: Как сделать стрельбу
Ты что, он же не код просит, а АЛГОРИТМ.
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо Andvrok за это полезное сообщение:
|
|
09.07.2015, 17:29
|
#12
|
Разработчик
Регистрация: 06.06.2011
Адрес: Ирк. обл.
Сообщений: 541
Написано 133 полезных сообщений (для 220 пользователей)
|
Ответ: Как сделать стрельбу
Правильней наверное условие очередное ему надо написать которое при виде бота и нажатие лкм летела пуля и если столкнулась с объектом то отняла 10 HP. Вот и весь АЛГОРИТМ )))
__________________
|
(Offline)
|
|
09.07.2015, 18:01
|
#13
|
Знающий
Регистрация: 21.03.2015
Сообщений: 262
Написано 6 полезных сообщений (для 7 пользователей)
|
Ответ: Как сделать стрельбу
сам страуструп говорил, что чужой код - мрак в ночи, а свой код - своя жизнь.
Код я почти полностью не понял.
А по простому алгоритму так:
если нажат пробел, то
проиграть звук выстрела
если какой-то объект равен центру экрана уж не знаю как там это по тригонометрии, то
отнять 20 хп
если хп > 0, то
проиграть (3д) звук крика
end if
если хп <= 0, то
проиграть (3д) звук крика(умер)
end if
end if
то, какая функция возвращает объект в центре экрана, вопрос.
|
(Offline)
|
|
09.07.2015, 18:03
|
#14
|
Знающий
Регистрация: 21.03.2015
Сообщений: 262
Написано 6 полезных сообщений (для 7 пользователей)
|
Ответ: Как сделать стрельбу
Ботов просто может быть несколько, и не будут же хп отниматься у одного, а стреляю с в другого.
|
(Offline)
|
|
09.07.2015, 18:14
|
#15
|
Знающий
Регистрация: 21.03.2015
Сообщений: 262
Написано 6 полезных сообщений (для 7 пользователей)
|
Ответ: Как сделать стрельбу
Кстати, вот цитата моего одного знакомого, который занимался блицом:
В 2008 году, я узнал про блиц. тогда бгт специально для аудио игр небыл готов. Была некоторая русская инструкция. тогда я ужасно знал английский. и ради атаки и т.д, мне пришлось лезть на английские форумы, так как на русских нормального ответа не давали. Я с большим трудом разобрался с этим. Много было ошибок, небыло инструкции по решению определенных задач, да и думаю сейчас тож нет.
я б тебе помог, да уже не помню ничего. так как забросил всё в том же 2008 году. так как ответ то я получил, но не полный.
Конец цитаты.
Ребят вот так же сдесь. у вас, в первом сообщении простое условие, а вы сказать функцию которая определяет в центре ли объект, и какой. можно даже без какой, ладно я через фор сделаю проверку сказать не можете.
А представлте вы нуб в этом языке и ничего не знаете? скажете, полезу в справку. ну а если английский не знаешь?
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 14:21.
|