Администратор
Регистрация: 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
__________________
Как минимум я помог многим (с)
|