forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   FAQ (http://forum.boolean.name/forumdisplay.php?f=15)
-   -   Создаём свой FPS (first person shooter) (http://forum.boolean.name/showthread.php?t=15)

impersonalis 21.08.2006 14:37

Re: Создаём свой FPS (first person shooter)
 
Это моя привычка ставить мало пробелов, в следствие чего, скрипт криво обработал конструкцию. Скачай аттач - там всё работоспособно.

smaller 21.08.2006 14:52

Re: Создаём свой FPS (first person shooter)
 
Молодец полезное дело делаешь!!!
Но у меня возник вопрос! Почему когда я двигаюсь навстречу БОТУ,я прохожу через него?

impersonalis 21.08.2006 15:06

Re: Создаём свой FPS (first person shooter)
 
Потому что Blitz3D не обрабатываеи коллизию с движущимся мешем
UPD:
что-то я сламерился (не в этом случае коллизия не работает)
спс alc'o'SHoLiK за то что тыкнул меня носом

Скоро исправлю

impersonalis 22.08.2006 01:39

Re: Создаём свой FPS (first person shooter)
 
Что ещё рассмотреть?

tormoz 22.08.2006 02:57

Re: Создаём свой FPS (first person shooter)
 
Цитата:

Потому что Blitz3D не обрабатываеи коллизию с движущимся мешем
Если выставить обоюдную коллизию и не злоупотреблять скоростями, то обрабатывает.

Тарас Шевченко 22.08.2006 03:05

Re: Создаём свой FPS (first person shooter)
 
Спасибо, ты делашь нужное дело и не называешь новичков ламерами. Щас нажму кнопку Thanks! А как сделать стаистику, ну типа чтобы на экране отображалось здоровье и уменьшалось когда надо? А и тоже самое с патронами, чтоб они не были бесконечными. Заранее спасибо.

impersonalis 22.08.2006 03:32

Re: Создаём свой FPS (first person shooter)
 
Вложений: 2
Эх.
Убедился в истине - программ без ошибок не бывает.
Пока правил коллизии (надо было поставиьт EntityRadius и сделать бота адекватных размеров) нарыл опечатку(!!! я в ужасе - этот мануал уже прочитало столько народу - в том числе и не славяноговрящего - а опечатка всё ещё жива была) и мат.ошибку в модели физики (любопытно- в параллельных проектах я её не допускал).
Вот поифкшенный код.
UPD:
У меня порой складывается ощущение, что своим туторам я себе помгаю,а не окружающим.
Ну что ж - зато теперь начинающие знают - как долго могут жить ошибки и как просты они могут быть.
Так сказть - не тутор, а реалити-шоу - пишу FPS.
UPD2:
так что не удивляйтесь - если черз пол-года я ещё найду ошибку в первых строках программы.
UPD3: да-да...

tormoz 22.08.2006 06:37

Re: Создаём свой FPS (first person shooter)
 
Я первый шуттер полгода писал - и все время что то исправлял.
Сейчас, как гляну на код - плохо становиться. штук 150 функций, и совершенно не помню что и зачем :)
А представьте проект класса АА на сях в 200 000 строк !

GoodWin 22.08.2006 11:59

Re: Создаём свой FPS (first person shooter)
 
стрелять ботов научи....
можно еще ограничить обзор у бота не только расстоянием, но и углом зрения...

пжл... ждемс...

да и еще... когда у игрока кончается жизнь надо с ним что-то сделать... :)

impersonalis 22.08.2006 20:58

Re: Создаём свой FPS (first person shooter)
 
Линия жизни
Линию можно сделать прямоугольником (RECT) и отрисовывать ей при каждом обновлении экрана. Это медленно. Можно сделать картинкой (image) будет работать быстрее (насколько мне известно) - но тоже не лучший способ. Лучше и универсальнее всего (подумайте а различных разрешениях экрана) - делать через 3D - спрайтом.
Чтобы не изобретать велик - возьмём готовую функцию Tormoz-а и немного модифицируем её (создав для этого специальный тип):
[highlight=blitzbasic]
Type xLine
Field mesh
Field texture
End Type

Function CreatePlane_m.xLine(File$,fl)
xl.xLine=New xLine
Local texture,scx#,scy#
mesh=CreateMesh()
surf=CreateSurface(mesh)
AddVertex surf,-1,1,0,0,0:AddVertex surf,1,1,0,1,0
AddVertex surf,1,-1,0,1,1:AddVertex surf,-1,-1,0,0,1

AddTriangle surf,0,1,2:AddTriangle surf,0,2,3
UpdateNormals mesh
texture=LoadTexture ( File$,fl)
img=LoadImage(File$)

scx#=ImageWidth (img)
scy#=ImageHeight (img)

ScaleMesh mesh,scx/256,scy/256,1
EntityTexture mesh,texture

FreeImage img

xl\mesh=mesh
xl\texture=texture

Return xl
End Function
[/highlight]
Эта функция создаст квад необъодимых размеров - под картинку File$.
[highlight=blitzbasic]
Function create_user(x#=0,y#=10,z#=0)
.....
sprite.xLine=CreatePlane_m("H.bmp",0)
EntityParent sprite\mesh,camera
EntityOrder sprite\mesh,-1
PositionEntity sprite\mesh,-1.65,1.45,2
EntityFX sprite\mesh,1
user_xline=sprite
[/highlight]
Создаём квад, привязываем его к камере. Устанавливаем порядок отрисовки (самым последним - поверх всех объектов). Позиционирцем. И ставим полноцветность (чтобы яркость изображения не зависела от текущего освещения). В папку с проектом кладём картинку - прямоугольник (у меня - размером 200 на 20).
[highlight=blitzbasic]
Global user_xline.xLine
[/highlight]
Ф-ция изменения состояния шкалы
[highlight=blitzbasic]
Function Change_H(xl.xLine,h)
SetBuffer TextureBuffer(xl\texture)
Color 0,0,0
Rect 0,0,TextureWidth(xl\texture),TextureHeight(xl\text ure)
Color 255,0,0
Rect 0,0,Float(TextureWidth(xl\texture))/100*h,TextureHeight(xl\texture)
SetBuffer BackBuffer()
EntityTexture xl\mesh,xl\texture
End Function
[/highlight]
Обработаем в Function update_bot():
[highlight=blitzbasic]
user_H=user_H-Rand(1,7)
Change_H(user_xline,user_H);новое
a\last_damage_time=MilliSecs()
[/highlight]
удаляем:
[highlight=blitzbasic]
Text 10,40,"H="+user_H
[/highlight]
допишем красивости ради в Function create_user(x#=0,y#=10,z#=0)
[highlight=blitzbasic]
EntityAlpha sprite\mesh,0.6
[/highlight]
Упростим и усовершенствуем процедуру изменеия тестуры квада:
[highlight=blitzbasic]
Color 0,0,0
xs=Float(TextureWidth(xl\texture))/100*(100-h)
xp=TextureWidth(xl\texture)-xs
Rect xp,0,xs,TextureHeight(xl\texture)
[/highlight]
Теперь можно немного поуркашать картинку. /См. аттач/
Кроме того я ещё подправил физику ботов и игрока (прыжок и гравитацию).

impersonalis 22.08.2006 21:00

Re: Создаём свой FPS (first person shooter)
 
Вложений: 2
код+ресурсы

impersonalis 22.08.2006 22:44

Re: Создаём свой FPS (first person shooter)
 
Последний патрон
Модифицурем наш класс индикаторов
[highlight=blitzbasic]
Type xLine
Field mesh
Field texture
Field max_count;масимальное значение индикатора
End Type
[/highlight]
и обработчик индикатора соответственно:
[highlight=blitzbasic]
Function Change_H(xl.xLine,h)
....
xs=Float(TextureWidth(xl\texture))/xl\max_count*(xl\max_count-h)
....
[/highlight]
Установим кол-во патронов в инвентаре для каждого типа оружия.
Укажем величину шкалы жизни.
[highlight=blitzbasic]
Function create_user(x#=0,y#=10,z#=0)
....
user_inv\s[0]=100
user_inv\s[1]=1000
....
sprite\max_count=100
...
[/highlight]
Пользователь может стрелять, только если есть боеприпасы к данному виду вооружения.
Отрицательную область оставим для оружия с неиссякаемым запасом.
[highlight=blitzbasic]
If MouseHit(1) And MilliSecs()-user_inv\last_shot_time>shot_S(user_inv\current)\r eload_time And user_inv\s[user_inv\current]<>0
user_gun=FindChild(GUN,"END")
create_shot(EntityX(user_gun,1),EntityY(user_gun,1 ),EntityZ(user_gun,1),EntityPitch(camera),EntityYa w(user),0,user_inv\current)
user_inv\last_shot_time=MilliSecs()
user_inv\s[user_inv\current]=user_inv\s[user_inv\current]-1
EndIf
[/highlight]
Опишем максимально вохможное кол-во патронов для этого оружия:
[highlight=blitzbasic]
Type SHOT_TYPE
Field sprite
Field damage
Field max_dist
Field v#
Field reload_time
Field max
End Type
......................
shot_S(0)\sprite=LoadSprite("sprite0.bmp")
HideEntity shot_S(0)\sprite
shot_S(0)\damage=95
shot_S(0)\max_dist=100
shot_S(0)\v=0.3
shot_S(0)\reload_time=1500
shot_S(0)\max=100;

shot_S(1)\sprite=LoadSprite("sprite1.bmp")
HideEntity shot_S(1)\sprite
shot_S(1)\damage=10
shot_S(1)\max_dist=1000
shot_S(1)\v=0.1
shot_S(1)\reload_time=0
shot_S(1)\max=1000;
..........................
[/highlight]
Создадим индикатор
[highlight=blitzbasic]
Global user_b_xline.xLine
[/highlight]
Настроим его
[highlight=blitzbasic]
Function create_user(x#=0,y#=10,z#=0)
....
;=
sprite.xLine=CreatePlane_m("BC.bmp",0)
EntityParent sprite\mesh,camera
EntityOrder sprite\mesh,-1
PositionEntity sprite\mesh,-1.9,0.7,2
RotateEntity sprite\mesh,0,0,90
EntityFX sprite\mesh,1
EntityAlpha sprite\mesh,0.6

sprite\max_count=shot_S(user_inv\current)\max
user_b_xline=sprite
;=
[/highlight]
Обработаем при уменьшении патронов...
[highlight=blitzbasic]
If MouseHit(1) And MilliSecs()-user_inv\last_shot_time>shot_S(user_inv\current)\r eload_time And user_inv\s[user_inv\current]<>0
user_gun=FindChild(GUN,"END")
create_shot(EntityX(user_gun,1),EntityY(user_gun,1 ),EntityZ(user_gun,1),EntityPitch(camera),EntityYa w(user),0,user_inv\current)
user_inv\last_shot_time=MilliSecs()
user_inv\s[user_inv\current]=user_inv\s[user_inv\current]-1
Change_H(user_b_xline,user_inv\s[user_inv\current])
EndIf
[/highlight]
.. и при смене вооружения
[highlight=blitzbasic]
Function change_item(i.inventar,move%)
p=i\current
While True
p=p+move
If p<0 p=9
If p>9 p=0
If i\s[p]<>0 Exit
Wend
Local bool=False
If i\current<>p bool=True
i\current=p
Return bool
End Function
...
Function update_user()
...
change_bool=change_item(user_inv,MouseZSpeed())
If change_bool
user_b_xline\max_count=shot_S(user_inv\current)\ma x
Change_H(user_b_xline,user_inv\s[user_inv\current])
EndIf
End Function
[/highlight]
Аналогично привинчивается индикатор перезарядки.

impersonalis 22.08.2006 22:47

Re: Создаём свой FPS (first person shooter)
 
Вложений: 4
8) Что-то я разогнался. Интересно - много-ли ошибок :@

Тарас Шевченко 23.08.2006 00:15

Re: Создаём свой FPS (first person shooter)
 
Круто! Но почему когда здоровье кончается перс не умирает, а патроны кончаются только тогда, когда пользуешься дробовиком?

impersonalis 23.08.2006 00:39

Re: Создаём свой FPS (first person shooter)
 
Цитата:

Сообщение от Тарас Шевченко
Круто! Но почему когда здоровье кончается перс не умирает, а патроны кончаются только тогда, когда пользуешься дробовиком?

Перса ещё не докодил.
Патроны кончаются всегда - просто для пистолета - их много больше, поэтому изменение незаметно

GoodWin 23.08.2006 10:07

Re: Создаём свой FPS (first person shooter)
 
Hi!
Нашел ошибку, когда патроны заканчиваются игра подвисает....

жду урок про стрельбу ботов....

impersonalis 23.08.2006 13:47

Re: Создаём свой FPS (first person shooter)
 
БагФиксN
Вчера при модификации индикаторов забыл учесть ещё возможность прироста индикатора (шкала жизни была описана только для уменьшения). Короче говоря:
[highlight=blitzbasic]
Function Change_H(xl.xLine,h)
tex=CreateTexture(TextureWidth(xl\texture),Texture Height(xl\texture))
CopyRect 0,0,TextureWidth(xl\texture),TextureHeight(xl\text ure),0,0,TextureBuffer(xl\texture),TextureBuffer(t ex)
SetBuffer TextureBuffer(tex)
Color 0,0,0
xs=Float(TextureWidth(xl\texture))/xl\max_count*(xl\max_count-h)
xp=TextureWidth(xl\texture)-xs
Rect xp,0,xs,TextureHeight(xl\texture)
SetBuffer BackBuffer()

EntityTexture xl\mesh,tex
FreeTexture tex
End Function
[/highlight]
Создаём текстуру tex с размерами текстуры-образца для данного индикатора (xl\texture).
Затем копируем в новую текстуру образец (берём участок от 0,0 до ширина,высота образца и копируем его в новую тексу, начиная с координат 0,0).
Затем проводим модификации с новой текстурой, накладываем её на квад и удаляем.

impersonalis 23.08.2006 13:54

Re: Создаём свой FPS (first person shooter)
 
Цитата:

Сообщение от GoodWin

жду урок про стрельбу ботов....

всему своё время

impersonalis 23.08.2006 14:52

Re: Создаём свой FPS (first person shooter)
 
Боевая система2
Добавил обоймы.
Для этого в типе заряда сделал поле, отвечающее за кол-во патронов в обойме:
[highlight=blitzbasic]
Type SHOT_TYPE
Field sprite
Field damage
Field max_dist
Field v#
Field reload_time
Field InCartridge
Field max
End Type
[/highlight]
А в инвентаре - массив, хранящий текущее число выстрелов с момента последней перезарядки, и флаг перезарядки.
[highlight=blitzbasic]
Type inventar
Field s[10]
Field InC[10]
Field current
Field last_shot_time
Field reload_flag
End Type
[/highlight]
Для визуализации - я сделал индикатор.
Причём он несёт двойную нагрузку: в процессе стрельбы он показывает расход патронов в обойме, в процессе перезарядки (клавиша R) - время, оставшееся до конца смены обоймы.
[highlight=blitzbasic]
Global user_reload_xline.xLine
....
Function create_user(x#=0,y#=10,z#=0)
....
sprite.xLine=CreatePlane_m("reload.bmp",0)
EntityParent sprite\mesh,camera
EntityOrder sprite\mesh,-1
PositionEntity sprite\mesh,-1.8,0.7,2
RotateEntity sprite\mesh,0,0,90
EntityFX sprite\mesh,1
EntityAlpha sprite\mesh,0.6

sprite\max_count=user_inv\InC[user_inv\current]
user_reload_xline=sprite
[/highlight]
А дальше ужОс в обновлении игрока:
[highlight=blitzbasic]
If MouseHit(1) And user_inv\InC[user_inv\current]<>0
user_gun=FindChild(GUN,"END")
create_shot(EntityX(user_gun,1),EntityY(user_gun,1 ),EntityZ(user_gun,1),EntityPitch(camera),EntityYa w(user),0,user_inv\current)
user_inv\s[user_inv\current]=user_inv\s[user_inv\current]-1
Change_H(user_b_xline,user_inv\s[user_inv\current])
user_inv\InC[user_inv\current]=user_inv\InC[user_inv\current]-1
Change_H(user_reload_xline,user_inv\InC[user_inv\current])
EndIf
[/highlight]
Если текущая обойма не пуста - совершаем выстрел.
Причём уменьшаем не только общее кол-во патронов, но икол-во патронов в обойме. Эти две величины в данной реализации независимы, поэтому надо строго следить за логикой.
[highlight=blitzbasic]
If KeyHit(19);reload
user_inv\reload_flag=True
user_inv\last_shot_time=MilliSecs()
user_reload_xline\max_count=Shot_S(user_inv\curren t)\reload_time
EndIf
[/highlight]
Если пользователь нажал R - ставим флаг перезарядки в истину, замеряем время и изменяем размер индикатора обоймы (как вы помните, теперь он несёт другую роль - указывать оставшееся до конца смены обоймы время).
[highlight=blitzbasic]
If MilliSecs()-user_inv\last_shot_time>shot_S(user_inv\current)\r eload_time And user_inv\reload_flag=True
user_inv\reload_flag=False
x=Shot_S(user_inv\current)\InCartridge
If x>user_inv\s[user_inv\current] x=user_inv\s[user_inv\current]
user_inv\InC[user_inv\current]=x
user_reload_xline\max_count=Shot_S(user_inv\curren t)\InCartridge
EndIf
[/highlight]
Если время перезарядки вышло и сам факт начала перезарядки был, то ставим флаг перезарядки в ложь.
Смотрим - досаточно ли патрон на целую обойму данного оружия: если нет, то пихаем в обойму всё что осталось.
Меняем размер инидикатора перезарядки - теперь он вновь исполняет старую функцию: указывает кол-во патрон в обойме.
[highlight=blitzbasic]
If user_inv\reload_flag=False
change_bool=change_item(user_inv,MouseZSpeed())
Else
Change_H(user_reload_xline,MilliSecs()-user_inv\last_shot_time)
EndIf
[/highlight]
Если идёт перезарядка - запрещаем смену оружия и меняем показания индикатора в соответствии с прошедшим временем.
[highlight=blitzbasic]
If change_bool=True
user_b_xline\max_count=shot_S(user_inv\current)\ma x
Change_H(user_b_xline,user_inv\s[user_inv\current])
user_reload_xline\max_count=Shot_S(user_inv\curren t)\InCartridge
Change_H(user_reload_xline,user_inv\InC[user_inv\current])
EndIf
[/highlight]
При смене оружия не забываем настроить индикатор на величину патронов в обойме у данного рода оружия, и указать текущее кол=во патронов в обойме.

В общем - понять сложно, но можно.

impersonalis 23.08.2006 14:55

Re: Создаём свой FPS (first person shooter)
 
Вложений: 2
:vinsent: :killall:

impersonalis 24.08.2006 00:58

Re: Создаём свой FPS (first person shooter)
 
ADD_N
Удобно написать функцию добавления данного кол-ва патронов в инвентарь:
[highlight=blitzbasic]
Function ADD_item(i.inventar,S,Count)
i\s [ S ] =i\s [ S ] +Count
If i\InC [ S ] =0
x=Shot_S(S)\InCartridge
If i\s [ S ]<x x=i\s [ S ]
i\InC [ S ]=x
EndIf
End Function
[/highlight]
Аргументы - инвентарь, слот (соответсвенно - тип оружия), кол-во патронов.
Функция сама добавит патроны в инвентарь, проверит кол-во патронов в обойме и если оно равно нулю будет произведенена попытка заполнить имеющимся кол-вом обойму.
[highlight=blitzbasic]
Function create_user(x#=0,y#=10,z#=0)
...
ADD_item(user_inv,0,100)

ADD_item(user_inv,1,1000)
[/highlight]

impersonalis 24.08.2006 01:13

Re: Создаём свой FPS (first person shooter)
 
БагФиксN+1
Благодаря GoodWin исправлена работа функци при пустом инвентаре.
Заодно пофикшена обработка нулевого смещения по инвентарю.
[highlight=blitzbasic]
Function change_item(i.inventar,move%)
If move%=0 Return
Local size_inv=10
p=i\current
iter=0
While True
p=p+move
iter=iter+1
If p<0 p=size_inv-1
If p>size_inv-1 p=0
If iter>size_inv Return False
If i\s[p]<>0 Exit
Wend
Local bool=False
If i\current<>p bool=True
i\current=p
Return bool
End Function
[/highlight]

impersonalis 24.08.2006 01:22

Re: Создаём свой FPS (first person shooter)
 
Вложений: 2
:teach:

Round 11.09.2006 22:14

Re: Создаём свой FPS (first person shooter)
 
Проблема в создании облаков:
Почему у меня, когда я зделал облака как всё было написано, было просто белое небо, я и пути к картинкам прописывал и всё равно вместо облаков чистое белое небо?

impersonalis 11.09.2006 23:43

Re: Создаём свой FPS (first person shooter)
 
Вывод: не всё сделал как написано, или же аппаратные проблемы с твоей стороны.
Скачай последний вариант кода с ихсодниками и проверь адекватность облаков в нём (без изменений).

GoodWin 10.10.2006 20:43

Re: Создаём свой FPS (first person shooter)
 
Что-то затихло, а я жду...жду....:)

impersonalis 10.10.2006 21:03

Re: Создаём свой FPS (first person shooter)
 
Цитата:

Сообщение от GoodWin
Что-то затихло, а я жду...жду....:)

ы? я думал всё рассмотрел... напомни

GoodWin 11.10.2006 12:16

Re: Создаём свой FPS (first person shooter)
 
стрелять ботов ты по моему так и не научил...
и даже на этом можно не останавливаться: создать уровень... добавить бонусы... и т.д. и т.п.

impersonalis 11.10.2006 15:51

Re: Создаём свой FPS (first person shooter)
 
ok. постараюсь)

impersonalis 29.10.2006 18:58

Re: Создаём свой FPS (first person shooter)
 
Вложений: 2
Закрутился я с учёбой.
Кода на 10 минут:
стреляющие боты

impersonalis 30.10.2006 23:13

Re: Создаём свой FPS (first person shooter)
 
Ну что - всё понятно в коде?

Diplomat 11.12.2006 01:08

Re: Создаём свой FPS (first person shooter)
 
2 Тарас Шевченко: оффтоп был перемещен и вынесен в отдельную тему.

ABTOMAT 21.05.2007 19:04

Re: Создаём свой FPS (first person shooter)
 
Молодец! Классный урок!
Теперь бы неплохо написать как сделать в 3Д Максе модельку врага и оружия.
Но и так мне понравилось!

З.Ы. Может, туториалом по моделям займусь я.... на каникулах...

ZanoZa 22.05.2007 23:59

Re: Создаём свой FPS (first person shooter)
 
Цитата:

Теперь бы неплохо написать как сделать в 3Д Максе модельку врага и оружия.
Сдается мне что импер этим заниматься не станет :) Да и зачем? это удел моделлеров :)

johnk 23.05.2007 04:38

Re: Создаём свой FPS (first person shooter)
 
Урок про создание ФПС - редкость, считай это большой плюс как Impersonalis'у так и булке.

Crayzi 26.06.2007 05:04

Re: Создаём свой FPS (first person shooter)
 
Можно ли реализовать щит (или броню, допустим чтобы когда игрока бъют то изначально забиралась она, а потом постепенно восстанавливалась, а когда закончится то начинали бы отбавлятся жизни) и отдачу при выстреле? :) было бы реалестичнее, притом разную для дробовика и пистолета.

alcoSHoLiK 26.06.2007 22:29

Re: Создаём свой FPS (first person shooter)
 
Конечно можно. Реализуй.

impersonalis 27.06.2007 00:46

Re: Создаём свой FPS (first person shooter)
 
Отдачу - сделаю как освобожусь (кодить мало, но ведь каменты нуны).
По поводу системы регенерации брони - не очень понял.

Crayzi 27.06.2007 03:02

Re: Создаём свой FPS (first person shooter)
 
то я немного перепутал местами слова и сказал недоконца свою мысль, хотел сказать: сделать игроку броню или еще лучше чтото вроде само восстанавливающегося щита. (конечно извиняюсь, я новичёк в этом деле и покачто мне до щитов и т. д. дела быть недолжно, но это обычное любопытство... да и пригодится все ж таки)

H@NON 27.06.2007 10:43

Re: Создаём свой FPS (first person shooter)
 
Броня то же здоровье. Просто создай две полоски здоровия и покрась их в разные цвета, а дальше сделай так чтоб жизни отнимались сначала с одной полоски а потом, когда они кончатся на первой, отнимай на второй и тд. Так можно сделать несколько уровней защиты. Ну это конешно все в теории, но попробуй это сделать сам.

Crayzi 27.06.2007 15:24

Re: Создаём свой FPS (first person shooter)
 
Цитата:

Сообщение от H@NON
Броня то же здоровье. Просто создай две полоски здоровия и покрась их в разные цвета, а дальше сделай так чтоб жизни отнимались сначала с одной полоски а потом, когда они кончатся на первой, отнимай на второй и тд. Так можно сделать несколько уровней защиты. Ну это конешно все в теории, но попробуй это сделать сам.

Значит, буду пробовать сам, всетаки самому подумать наверное будет полезнее :)

impersonalis 27.06.2007 16:25

Re: Создаём свой FPS (first person shooter)
 
Вложений: 2
Вот 2 нововведения.
Единственное что - отдачу сделал в виде ирреального импульса с нулевой длительностью по времени. :pure_magic:

DED MozDay 11.07.2007 09:45

Re: Создаём свой FPS (first person shooter)
 
Классная работа !!!
Но почему все в php ?
Можешь в html перевести, а то у меня все php вскываются Дримвивером.

moka 11.07.2007 12:29

Re: Создаём свой FPS (first person shooter)
 
А ты при скачке просто перименовывай. ;) это такой баг на всех Bulletin форумах.

Crayzi 17.09.2007 16:11

Re: Создаём свой FPS (first person shooter)
 
Цитата:

Сообщение от impersonalis
Вот 2 нововведения.
Единственное что - отдачу сделал в виде ирреального импульса с нулевой длительностью по времени. :pure_magic:

Нащел баг, если начать перезарядку с неполностью закончившейся обоймой то можно стрелять по премя перезарядки. Вывод, при перезарядке надо запретить не только смену оружия но и стрельбу. :crazy:

moka 17.09.2007 17:44

Re: Создаём свой FPS (first person shooter)
 
Crayzi, обычно смену оружия не блокируют, а просто при смене оружия останавливается перезарядка и обнуляется. Т.к. ситуация когда перезаряжаешся, и вдруг меняешь на пистолет чтобы отбиться от подбежавшего моба - хорошо, а умереть и тыкая на цифру 2 чтобы вытащить другое оружее, а оно не вылазит - взбесит игрока :)

Данил 17.09.2007 18:27

Re: Создаём свой FPS (first person shooter)
 
Цитата:

А ты при скачке просто перименовывай. это такой баг на всех Bulletin форумах.
в IE у меня постоянно скачивалось что-то, да ещё и без разширения.. долго понять не мог, что это архив... ы, тупил сильно

А в опере усе норм)

impersonalis 17.09.2007 20:47

Re: Создаём свой FPS (first person shooter)
 
Цитата:

Сообщение от Crayzi
Нащел баг, если начать перезарядку с неполностью закончившейся обоймой то можно стрелять по премя перезарядки. Вывод, при перезарядке надо запретить не только смену оружия но и стрельбу. :crazy:

Угу:
подправьте
250 строка
Код:

If MouseHit(1) And user_inv\InC[user_inv\current]<>0 And user_inv\reload_flag=False

Crayzi 25.09.2007 04:59

Re: Создаём свой FPS (first person shooter)
 
[quote=impersonalis][quote]
Дай пожалуйста урок про отображение полосок с жизнями ботов над ними, ато мне после многих попыток методом научного тыка:bad: :moil: я все ж почти здался... (я так понял там надо както с помощью команды "Handle" или както так, но я даже непредставляю как с ней работать, по тому как сделано отбирание жизней и удаление ботов я разобратся не смог:( ).

impersonalis 25.09.2007 19:35

Re: Создаём свой FPS (first person shooter)
 
К сожалению, пока не обладаю достаточным временем.
Но в принципе возможны 2 базовых вараинта:
: создавать спрайты-полсоы, несоредственно над ботами
: при помощи команды CameraProject camera,x#,y#,z# и сопутствующих, определять 2д координаты бота на экране и создавать 2д-примитивы

Crayzi 26.09.2007 02:21

Re: Создаём свой FPS (first person shooter)
 
Цитата:

Сообщение от impersonalis
К сожалению, пока не обладаю достаточным временем.
Но в принципе возможны 2 базовых вараинта:
: создавать спрайты-полсоы, несоредственно над ботами
: при помощи команды CameraProject camera,x#,y#,z# и сопутствующих, определять 2д координаты бота на экране и создавать 2д-примитивы

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

dimanche13 26.09.2007 12:10

Re: Создаём свой FPS (first person shooter)
 
Объясняю на пальцах, про полоску жизни. Есть две полоски одна отображает максимальное кол-во жизни бота, вторая изображает текущее кол-во жизни и рисуется поверх первой. Так вот длинна(ширина если угодно) второй полосы как я уже сказал зависит от текущего кол-ва жизни бота и вычисляется так:

длина_2_полоски = (длина_1_полоски * НР_бота) / Максимум_НР_бота

более подробно будет в статье...

Crayzi 26.09.2007 15:20

Re: Создаём свой FPS (first person shooter)
 
Цитата:

Сообщение от dimanche13
Объясняю на пальцах, про полоску жизни. Есть две полоски одна отображает максимальное кол-во жизни бота, вторая изображает текущее кол-во жизни и рисуется поверх первой. Так вот длинна(ширина если угодно) второй полосы как я уже сказал зависит от текущего кол-ва жизни бота и вычисляется так:

длина_2_полоски = (длина_1_полоски * НР_бота) / Максимум_НР_бота

более подробно будет в статье...

Блин, тут у меня одна проблемма, над какой я пока что думаю, но решения невижу, как узнать количество "НР_бота" каждого бота...

H@NON 26.09.2007 15:53

Re: Создаём свой FPS (first person shooter)
 
Завести элемент в типе под названием HP. И прибавлять/отнимать от него, то есть:
Код:


global demage_str# = 10

type botinfo
...
field HP
...
end type

function UpdateBot()
for bot.botinfo = each botinfo
...
bot\HP = bot\HP - demage_str#
...
next


dimanche13 26.09.2007 16:07

Re: Создаём свой FPS (first person shooter)
 
H@NON, если уж по чесноку то "damage" и к томуж надо делать проверку типа: иф бот.НР <= 0 зен бот.суицид

H@NON 26.09.2007 16:15

Re: Создаём свой FPS (first person shooter)
 
Это было написано для примера, так сказать показана сама реализация. То что с этим семплом делать решать каждому автору в частности. К тому же для наглядности приведены многоточия, чтоб показать что это только кусок кода

RoBBeR 26.12.2007 13:44

Re: Создаём свой FPS (first person shooter)
 
Цитата:

Сообщение от impersonalis
Автомат в руки
Вот мне тут сообщают в ICQ, что дескать невозможно главгеру оружие вручить из-за моей модели представления... Странно...
Попробуем.
Смотрим в контакт-лист: ни одного моделлера в сети =/ кхым... Роль оружия будет выполнять цилиндр...........

А как уружие вставить нужна модель кароче напишите код плизз:super: ??
Модельки оружия я нашел там пистолеты есть.

Zerge 07.05.2008 17:30

Re: Создаём свой FPS (first person shooter)
 
а можно еще раз аттач выложить?а то неработает:((

Crystal 09.06.2008 00:08

Ответ: Re: Создаём свой FPS (first person shooter)
 
Цитата:

Сообщение от RoBBeR (Сообщение 72112)
А как уружие вставить нужна модель кароче напишите код плизз:super: ??
Модельки оружия я нашел там пистолеты есть.

Как как, лодмеш, копиентити, ентитипарент.

nuclear-90 14.07.2008 19:11

Ответ: Создаём свой FPS (first person shooter)
 
помоему большинство из этой ничему не научилось,чистый копипаст

ABTOMAT 14.07.2008 21:01

Ответ: Создаём свой FPS (first person shooter)
 
nuclear-90, истину глаголешь ;)

impersonalis 15.07.2008 02:48

Ответ: Создаём свой FPS (first person shooter)
 
Цитата:

Сообщение от nuclear-90 (Сообщение 82266)
помоему большинство из этой ничему не научилось,чистый копипаст

было бы желание =( А код мой

nuclear-90 15.07.2008 08:41

Ответ: Создаём свой FPS (first person shooter)
 
impersonalis
тебе +1 однозначно,я хоть код не копипастил,а разные идеи взял на вооружение :)

oleeg 26.09.2008 11:12

Ответ: Создаём свой FPS (first person shooter)
 
Не могли бы выложить рабочую версию?


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

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