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

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

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

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

Ответ
 
Опции темы
Старый 19.08.2006, 11:32   #61
Ins!de
ПроЭктировщик
 
Регистрация: 10.08.2006
Сообщений: 95
Написано 0 полезных сообщений
(для 0 пользователей)
Re: Создаём свой FPS (first person shooter)

Ух ты, спасибо impersonalis! Полезная статья)
(Offline)
 
Ответить с цитированием
Старый 20.08.2006, 19:14   #62
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 03.09.2005
Сообщений: 14,014
Написано 6,795 полезных сообщений
(для 20,913 пользователей)
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, 19:19   #63
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 03.09.2005
Сообщений: 14,014
Написано 6,795 полезных сообщений
(для 20,913 пользователей)
Сообщение Re: Создаём свой FPS (first person shooter)

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


Field s&#91

а это, что за переменная такая... имя такое...или что-то особое?
(Offline)
 
Ответить с цитированием
Старый 21.08.2006, 10:37   #65
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 03.09.2005
Сообщений: 14,014
Написано 6,795 полезных сообщений
(для 20,913 пользователей)
Re: Создаём свой FPS (first person shooter)

Это моя привычка ставить мало пробелов, в следствие чего, скрипт криво обработал конструкцию. Скачай аттач - там всё работоспособно.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 21.08.2006, 10:52   #66
smaller
Нуждающийся
 
Регистрация: 04.07.2006
Сообщений: 54
Написано 0 полезных сообщений
(для 0 пользователей)
Re: Создаём свой FPS (first person shooter)

Молодец полезное дело делаешь!!!
Но у меня возник вопрос! Почему когда я двигаюсь навстречу БОТУ,я прохожу через него?
(Offline)
 
Ответить с цитированием
Старый 21.08.2006, 11:06   #67
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 03.09.2005
Сообщений: 14,014
Написано 6,795 полезных сообщений
(для 20,913 пользователей)
Re: Создаём свой FPS (first person shooter)

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

Скоро исправлю
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 21.08.2006, 21:39   #68
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 03.09.2005
Сообщений: 14,014
Написано 6,795 полезных сообщений
(для 20,913 пользователей)
Re: Создаём свой FPS (first person shooter)

Что ещё рассмотреть?
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 21.08.2006, 22:57   #69
tormoz
Гигант индустрии
 
Аватар для tormoz
 
Регистрация: 14.12.2005
Сообщений: 2,785
Написано 1,183 полезных сообщений
(для 4,437 пользователей)
Re: Создаём свой FPS (first person shooter)

Потому что Blitz3D не обрабатываеи коллизию с движущимся мешем
Если выставить обоюдную коллизию и не злоупотреблять скоростями, то обрабатывает.
__________________
(Offline)
 
Ответить с цитированием
Старый 21.08.2006, 23:05   #70
Тарас Шевченко
Знающий
 
Регистрация: 16.08.2006
Сообщений: 246
Написано 0 полезных сообщений
(для 0 пользователей)
Re: Создаём свой FPS (first person shooter)

Спасибо, ты делашь нужное дело и не называешь новичков ламерами. Щас нажму кнопку Thanks! А как сделать стаистику, ну типа чтобы на экране отображалось здоровье и уменьшалось когда надо? А и тоже самое с патронами, чтоб они не были бесконечными. Заранее спасибо.
(Offline)
 
Ответить с цитированием
Старый 21.08.2006, 23:32   #71
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 03.09.2005
Сообщений: 14,014
Написано 6,795 полезных сообщений
(для 20,913 пользователей)
Печаль Re: Создаём свой FPS (first person shooter)

Эх.
Убедился в истине - программ без ошибок не бывает.
Пока правил коллизии (надо было поставиьт EntityRadius и сделать бота адекватных размеров) нарыл опечатку(!!! я в ужасе - этот мануал уже прочитало столько народу - в том числе и не славяноговрящего - а опечатка всё ещё жива была) и мат.ошибку в модели физики (любопытно- в параллельных проектах я её не допускал).
Вот поифкшенный код.
UPD:
У меня порой складывается ощущение, что своим туторам я себе помгаю,а не окружающим.
Ну что ж - зато теперь начинающие знают - как долго могут жить ошибки и как просты они могут быть.
Так сказть - не тутор, а реалити-шоу - пишу FPS.
UPD2:
так что не удивляйтесь - если черз пол-года я ещё найду ошибку в первых строках программы.
UPD3: да-да...
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 22.08.2006, 02:37   #72
tormoz
Гигант индустрии
 
Аватар для tormoz
 
Регистрация: 14.12.2005
Сообщений: 2,785
Написано 1,183 полезных сообщений
(для 4,437 пользователей)
Re: Создаём свой FPS (first person shooter)

Я первый шуттер полгода писал - и все время что то исправлял.
Сейчас, как гляну на код - плохо становиться. штук 150 функций, и совершенно не помню что и зачем
А представьте проект класса АА на сях в 200 000 строк !
__________________
(Offline)
 
Ответить с цитированием
Старый 22.08.2006, 07:59   #73
GoodWin
ПроЭктировщик
 
Регистрация: 14.08.2006
Сообщений: 105
Написано 15 полезных сообщений
(для 19 пользователей)
Re: Создаём свой FPS (first person shooter)

стрелять ботов научи....
можно еще ограничить обзор у бота не только расстоянием, но и углом зрения...

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

да и еще... когда у игрока кончается жизнь надо с ним что-то сделать...
(Offline)
 
Ответить с цитированием
Старый 22.08.2006, 16:58   #74
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 03.09.2005
Сообщений: 14,014
Написано 6,795 полезных сообщений
(для 20,913 пользователей)
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, 17:00   #75
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 03.09.2005
Сообщений: 14,014
Написано 6,795 полезных сообщений
(для 20,913 пользователей)
Re: Создаём свой FPS (first person shooter)

код+ресурсы
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

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

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


Часовой пояс GMT +1, время: 06:24.


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