НАВИГАЦИЯ
Главная
Учебник
Файлы
Новости
Примеры
Ссылки
Сообщения
Форум
От создателя







Во многих играх вы замечали, что, например, над героем находится текст, показывающий состояние его жизни, энергии, количестве патронов и др. Этим и займемся. Нужно будет, чтобы над любым героем показывался текст. Как всегда, создадим функцию, чтобы можно было применить и на других объектах.

Сначала нужно будет получить координаты объекта из 3D в 2D. Это выполняет команда:
CameraProject(перем_камеры,x,y,z)
Эта команда проецирует координаты из 3D мира в координатную систему монитора.

После этого можно получить соответствующие координаты можно с помощью команд:
ProjectedX#() и ProjectedY#()

Функция будет такая:
Function LabelEntity(entity%,camera,txt$,px%,py%)
CameraProject(camera%,EntityX(entity%),EntityY(entity%),EntityZ(entity%))
dist#=EntityDistance(entity%,camera)
If (EntityInView(entity%,camera%) Then Text ProjectedX#()+px%,ProjectedY#()+py%,txt$
End Function

entity% - переменная объекта, camera - переменная камеры, txt$ - текст , px% и py% - смещение текста. Если объект находится в поле видимости камеры, то выходит текст над объектом.

Graphics3D 1024,768
SetBuffer BackBuffer()

eye=CreateCamera()
sphere=CreateSphere()
PositionEntity sphere,0,0,-5
l=CreateLight()
RotateEntity l,90,0,0
Color 255,0,0

Repeat
MoveEntity sphere,0,0,0.25
TurnEntity sphere,0.1,0,0
RenderWorld
LabelEntity(sphere,eye,"Шарик",-10,-20,10,100)
Flip
Until KeyHit(1)
End

Function LabelEntity(entity%,camera,txt$,px%,py%,near#,far#)
CameraProject(camera%,EntityX(entity%),EntityY(entity%),EntityZ(entity%))
dist#=EntityDistance(entity%,camera)
If (EntityInView(entity%,camera%) And (dist#>=near# And dist#<=far#)) Then Text
ProjectedX#()+px%,ProjectedY#()+py%,txt$
End Function

Можно добавить дополнительное условие, чтобы текст не выходил, когда объект очень близко или далеко:
Function LabelEntity(entity%,camera,txt$,px%,py%,near#,far#)
CameraProject(camera%,EntityX(entity%),EntityY(entity%),EntityZ(entity%))
dist#=EntityDistance(entity%,camera)
If (EntityInView(entity%,camera%) And (dist#>=near# And dist#<=far#)) Then Text ProjectedX#()+px%,ProjectedY#()+py%,txt$
End Function

Можете скачать пример:TextedEntity.zip(1,1 кб)



X