Показать сообщение отдельно
Старый 19.09.2005, 07:44   #3
SubZer0
Администратор
 
Аватар для SubZer0
 
Регистрация: 03.09.2005
Сообщений: 2,408
Написано 301 полезных сообщений
(для 996 пользователей)
второй вопрос:

я с твоим кодом чето толком не разобрался... ты лучше запакуй код в маленький архив со всеми текстурами и моделями и прицепи к сообщению, можно до 5000000 байт прицеплять...


я короче свой код написал, демонстрирует работу полностью, ты его потом под себя переделай как тебе надо...

; графический режим и буфер (как всегда)
graphics3d 800,600,32,2
setbuffer backbuffer()

; создаем камеру и помещаем ее в место откуда нам все видно
camera=createcamera()
positionentity camera,0,20,-50

; создаем свет 
rotateentity createlight(),0,20,40

; создаем препятствие и делаем ему полигональний пик-режим
cube=createcube()
positionentity cube,0,0,20
scaleentity cube,5,10,5
entitypickmode cube,2

; создаем игрока и делаем ему тоже полигональный пик-режим
player= CreateCube()
entitycolor player,50,250,50
scaleentity player,3,3,3
entitypickmode player,2

; создаем зрителя (может быть и камера), для него пик-режим не устанавливаем
; этот режим нужен только для тех объектов на которые будем "смотреть"
; помещаем зрителя под камерой (для наглядности)
viewer = CreateSphere()
positionentity viewer,0,16,-45

; главный цикл
repeat

; самая главная функция (из-за нее все работает)
; функция смотрит по вектору (в трехмерных координатах) от "XYZ" с длиной "XYZ" и 
; возвращает нам идентификатор первого попавшегося на этой линии объекта
; делаем начальные координаты в точке нашено зрителя EntityX(viewer)...
; а сам вектор направляем в игрока (простая геометрия) путем 
; вычитания координат EntityX(player)-EntityX(viewer)...
Pickentity=linepick(EntityX(viewer),EntityY(viewer),EntityZ(viewer), EntityX(player)-EntityX(viewer),EntityY(player)-EntityY(viewer),EntityZ(player)-EntityZ(viewer))

; приравниваем координаты вывода текста к нулю
px#=0
py#=0
; если игрок находится в видимости камеры и 
; он является первым на линии просмотра от viewer до player (ничего другого на пути нет,
; иначе в Pickentity будет другой объект, за который игрок спрятался и условие не сработает
; ТО
if EntityInView(player,camera) And Pickentity=player
; записываем в px и py координаты вывода имени персонажа на экран
 cameraproject(camera,EntityX(player),EntityY(player),EntityZ(player))
 px=ProjectedX()
 py=ProjectedY()
endif

; тут думаю понятно, по клавишам перемещаем игрока по полю
if KeyDown(200) Then TranslateEntity player,0,0,1
if KeyDown(208) Then TranslateEntity player,0,0,-1

if KeyDown(205) Then TranslateEntity player,1,0,0
if KeyDown(203) Then TranslateEntity player,-1,0,0


; прорисовываем мир
renderworld

; теперь смотрим если какаянибудь координата отлична от нуля,
; значит сработало условие (см. выше) значит объект находится в поле зрения камеры
; и в поле зрения зрителя, значит выводим его имя на экран
if px or py Then 
 Color 255,0,0
 Text px,py,"Player"
 Color 255,255,255
endif

; меняем буфер обмена
flip

; закрываем цикл
until KeyHit(1)

; конец программы
end
__________________
Как минимум я помог многим (с)
(Offline)
 
Ответить с цитированием