|
FAQ Туториалы и часто задаваемые вопросы |
19.08.2006, 15:32
|
#61
|
ПроЭктировщик
Регистрация: 10.08.2006
Сообщений: 95
Написано 0 полезных сообщений (для 0 пользователей)
|
Re: Создаём свой FPS (first person shooter)
Ух ты, спасибо impersonalis! Полезная статья)
|
(Offline)
|
|
20.08.2006, 23:14
|
#62
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Re: Создаём свой FPS (first person shooter)
Инвентарь
Один из самых популярных вопросов.
Инвентарь (как и многое другое) - как хочешь так и кодируй. Я предложу один из вариантов.
Пишем тип:
[highlight=blitzbasic]
Type inventar
Field s[10]
Field current
Field last_shot_time
End Type
[/highlight]
создайм "один инвентарь" для игрока:
[highlight=blitzbasic]
Global user_inv.INVENTAR=New INVENTAR
[/highlight]
в Function create_user(x#=0,y#=10,z#=0) допишем:
[highlight=blitzbasic]
For i=0 To 10
user_inv\s[i]=0
Next
user_inv\s[0]=1
user_inv\current=0
[/highlight]
Global last_shot_time -удаляем из кода.
В Function update_user() добавляем универсальности:
[highlight=blitzbasic]
If MouseHit(1) And MilliSecs()-user_inv\last_shot_time>shot_delay
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,0)
user_inv\last_shot_time=MilliSecs()
EndIf
[/highlight]
Обработчик ПКМ стираем.
Неплохо бы сделать для каждого образца оружия своё время перезарядки (ожидания между выстрелами):
[highlight=blitzbasic]
Type SHOT_TYPE
Field sprite
Field damage
Field max_dist
Field v#
Field reload_time
End Type
[/highlight]
[highlight=blitzbasic]
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(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
[/highlight]
Const shot_delay=1000 - нам больше не понадобится.
[highlight=blitzbasic]
If MouseHit(1) And MilliSecs()-user_inv\last_shot_time>shot_S(user_inv\current)\r eload_time
[/highlight]
Если юзер тыкнул ЛКМ и время с последнего выстрела прошло достаточно для перезарядки текущего оружия, то
[highlight=blitzbasic]
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()
[/highlight]
[highlight=blitzbasic]
If MilliSecs()-user_inv\last_shot_time<shot_S(user_inv\current)\r eload_time
Text 10,10,"RELOAD..."
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
i\current=p
End Function
[/highlight]
Вот такая вот фунЕция:
i.inventar - инвентарь с которым мы будем работать
move% -примает значения 1 и -1 -направление движения по инвентарю (след./пред.)
В update_user() допишем:
[highlight=blitzbasic]
change_item(user_inv,MouseZSpeed())
[/highlight]
А в Function create_user(x#=0,y#=10,z#=0):
[highlight=blitzbasic]
user_inv\s[0]=1
user_inv\s[1]=1;добавим
[/highlight]
Можно полюбоватся (или поужасаться) уже: запускаем, колёскиом выбираем оружие из инвентаря, ЛКМ-ом стреляем.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
20.08.2006, 23:19
|
#63
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Re: Создаём свой FPS (first person shooter)
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
21.08.2006, 13:49
|
#64
|
ПроЭктировщик
Регистрация: 14.08.2006
Сообщений: 105
Написано 15 полезных сообщений (для 19 пользователей)
|
Re: Создаём свой FPS (first person shooter)
а это, что за переменная такая... имя такое...или что-то особое?
|
(Offline)
|
|
21.08.2006, 14:37
|
#65
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Re: Создаём свой FPS (first person shooter)
Это моя привычка ставить мало пробелов, в следствие чего, скрипт криво обработал конструкцию. Скачай аттач - там всё работоспособно.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
21.08.2006, 14:52
|
#66
|
Нуждающийся
Регистрация: 04.07.2006
Сообщений: 54
Написано 0 полезных сообщений (для 0 пользователей)
|
Re: Создаём свой FPS (first person shooter)
Молодец полезное дело делаешь!!!
Но у меня возник вопрос! Почему когда я двигаюсь навстречу БОТУ,я прохожу через него?
|
(Offline)
|
|
21.08.2006, 15:06
|
#67
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Re: Создаём свой FPS (first person shooter)
Потому что Blitz3D не обрабатываеи коллизию с движущимся мешем
UPD:
что-то я сламерился (не в этом случае коллизия не работает)
спс alc'o'SHoLiK за то что тыкнул меня носом
Скоро исправлю
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
22.08.2006, 01:39
|
#68
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Re: Создаём свой FPS (first person shooter)
Что ещё рассмотреть?
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
22.08.2006, 02:57
|
#69
|
Гигант индустрии
Регистрация: 14.12.2005
Сообщений: 2,785
Написано 1,183 полезных сообщений (для 4,437 пользователей)
|
Re: Создаём свой FPS (first person shooter)
Потому что Blitz3D не обрабатываеи коллизию с движущимся мешем
|
Если выставить обоюдную коллизию и не злоупотреблять скоростями, то обрабатывает.
__________________
|
(Offline)
|
|
22.08.2006, 03:05
|
#70
|
Знающий
Регистрация: 17.08.2006
Сообщений: 246
Написано 0 полезных сообщений (для 0 пользователей)
|
Re: Создаём свой FPS (first person shooter)
Спасибо, ты делашь нужное дело и не называешь новичков ламерами. Щас нажму кнопку Thanks! А как сделать стаистику, ну типа чтобы на экране отображалось здоровье и уменьшалось когда надо? А и тоже самое с патронами, чтоб они не были бесконечными. Заранее спасибо.
|
(Offline)
|
|
22.08.2006, 03:32
|
#71
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Re: Создаём свой FPS (first person shooter)
Эх.
Убедился в истине - программ без ошибок не бывает.
Пока правил коллизии (надо было поставиьт EntityRadius и сделать бота адекватных размеров) нарыл опечатку(!!! я в ужасе - этот мануал уже прочитало столько народу - в том числе и не славяноговрящего - а опечатка всё ещё жива была) и мат.ошибку в модели физики (любопытно- в параллельных проектах я её не допускал).
Вот поифкшенный код.
UPD:
У меня порой складывается ощущение, что своим туторам я себе помгаю,а не окружающим.
Ну что ж - зато теперь начинающие знают - как долго могут жить ошибки и как просты они могут быть.
Так сказть - не тутор, а реалити-шоу - пишу FPS.
UPD2:
так что не удивляйтесь - если черз пол-года я ещё найду ошибку в первых строках программы.
UPD3: да-да...
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
22.08.2006, 06:37
|
#72
|
Гигант индустрии
Регистрация: 14.12.2005
Сообщений: 2,785
Написано 1,183 полезных сообщений (для 4,437 пользователей)
|
Re: Создаём свой FPS (first person shooter)
Я первый шуттер полгода писал - и все время что то исправлял.
Сейчас, как гляну на код - плохо становиться. штук 150 функций, и совершенно не помню что и зачем
А представьте проект класса АА на сях в 200 000 строк !
__________________
|
(Offline)
|
|
22.08.2006, 11:59
|
#73
|
ПроЭктировщик
Регистрация: 14.08.2006
Сообщений: 105
Написано 15 полезных сообщений (для 19 пользователей)
|
Re: Создаём свой FPS (first person shooter)
стрелять ботов научи....
можно еще ограничить обзор у бота не только расстоянием, но и углом зрения...
пжл... ждемс...
да и еще... когда у игрока кончается жизнь надо с ним что-то сделать...
|
(Offline)
|
|
22.08.2006, 20:58
|
#74
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
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]
Теперь можно немного поуркашать картинку. /См. аттач/
Кроме того я ещё подправил физику ботов и игрока (прыжок и гравитацию).
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
22.08.2006, 21:00
|
#75
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Re: Создаём свой FPS (first person shooter)
код+ресурсы
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 22:47.
|