Показать сообщение отдельно
Старый 22.08.2006, 20:58   #74
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 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)
 
Ответить с цитированием