Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D > FAQ

FAQ Туториалы и часто задаваемые вопросы

Ответ
 
Опции темы
Старый 22.08.2006, 22:44   #76
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
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]
Аналогично привинчивается индикатор перезарядки.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 22.08.2006, 22:47   #77
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Re: Создаём свой FPS (first person shooter)

Что-то я разогнался. Интересно - много-ли ошибок
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 23.08.2006, 00:15   #78
Тарас Шевченко
Знающий
 
Регистрация: 17.08.2006
Сообщений: 246
Написано 0 полезных сообщений
(для 0 пользователей)
Re: Создаём свой FPS (first person shooter)

Круто! Но почему когда здоровье кончается перс не умирает, а патроны кончаются только тогда, когда пользуешься дробовиком?
(Offline)
 
Ответить с цитированием
Старый 23.08.2006, 00:39   #79
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Re: Создаём свой FPS (first person shooter)

Сообщение от Тарас Шевченко
Круто! Но почему когда здоровье кончается перс не умирает, а патроны кончаются только тогда, когда пользуешься дробовиком?
Перса ещё не докодил.
Патроны кончаются всегда - просто для пистолета - их много больше, поэтому изменение незаметно
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 23.08.2006, 10:07   #80
GoodWin
ПроЭктировщик
 
Регистрация: 14.08.2006
Сообщений: 105
Написано 15 полезных сообщений
(для 19 пользователей)
Re: Создаём свой FPS (first person shooter)

Hi!
Нашел ошибку, когда патроны заканчиваются игра подвисает....

жду урок про стрельбу ботов....
(Offline)
 
Ответить с цитированием
Старый 23.08.2006, 13:47   #81
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
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).
Затем проводим модификации с новой текстурой, накладываем её на квад и удаляем.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 23.08.2006, 13:54   #82
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Re: Создаём свой FPS (first person shooter)

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

жду урок про стрельбу ботов....
всему своё время
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 23.08.2006, 14:52   #83
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
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]
При смене оружия не забываем настроить индикатор на величину патронов в обойме у данного рода оружия, и указать текущее кол=во патронов в обойме.

В общем - понять сложно, но можно.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 23.08.2006, 14:55   #84
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Сообщение Re: Создаём свой FPS (first person shooter)

__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 24.08.2006, 00:58   #85
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
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]
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 24.08.2006, 01:13   #86
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
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]
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 24.08.2006, 01:22   #87
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Re: Создаём свой FPS (first person shooter)

__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 11.09.2006, 22:14   #88
Round
Оператор ЭВМ
 
Регистрация: 10.09.2006
Сообщений: 47
Написано 0 полезных сообщений
(для 0 пользователей)
Re: Создаём свой FPS (first person shooter)

Проблема в создании облаков:
Почему у меня, когда я зделал облака как всё было написано, было просто белое небо, я и пути к картинкам прописывал и всё равно вместо облаков чистое белое небо?
(Offline)
 
Ответить с цитированием
Старый 11.09.2006, 23:43   #89
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Re: Создаём свой FPS (first person shooter)

Вывод: не всё сделал как написано, или же аппаратные проблемы с твоей стороны.
Скачай последний вариант кода с ихсодниками и проверь адекватность облаков в нём (без изменений).
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 10.10.2006, 20:43   #90
GoodWin
ПроЭктировщик
 
Регистрация: 14.08.2006
Сообщений: 105
Написано 15 полезных сообщений
(для 19 пользователей)
Re: Создаём свой FPS (first person shooter)

Что-то затихло, а я жду...жду....
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создаём свой Crimsonland. Данил FAQ и уроки 54 10.07.2009 00:19
Свои шрифты DiS[IP] Библиотеки 20 24.02.2009 10:47
3rd person и руки Stalnoy_Gvozd' 3D-программирование 6 05.01.2007 19:34
Аля свой язык..... Raiter Болтовня 12 27.09.2006 18:36
Создаём свой Fps (first Person Shooter) impersonalis Болтовня 5 22.02.2006 20:37


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com