forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   НУ СРОЧНО НУЖНА ПОМОЩЬ! (http://forum.boolean.name/showthread.php?t=101)

KRIK 19.09.2005 04:55

ОБЪЯСНЯЮ ПОДРОБНО, ЧТО МНЕ НАДО!

I.Как сделать чтобы вот это работало не на клавеатуре, а намышке?

1.Двигая мышку в ВЕРХ, в НИЗ!!!!
Код:

If KeyDown(44) Then MoveEntity cam,0,-0.5,0
If KeyDown(45) Then MoveEntity cam,0,0.5,0

2.Крутя колёсико мышки в ВЕРХ ,в НИЗ!!!
Код:

If KeyDown (46) Then MoveEntity cam,0,0,-2
If KeyDown(47) Then MoveEntity cam,0,0,2

II. В данном примере у меня бегает robot неподялёку от кубиков(я заминил ими других героев - БОТОВ)
cone и cub на каторых написанны имена ,и эти имена всё время показываются, хоть мой герой убежит за километр,хоть зайду за припятствие(Стену), я буду видеть их имена, А Я ПРОШУ ЧТОБЫ КОГДА robot УБЕГАЛ ЗА ЧТО-НИБУДЬ И cone и cub НЕ БЫЛО ВИДНО, ИХ ИМЕНА(cone и cub) ИЗЧЕЗАЛИ, А КОГДА ИХ ВИДНО ИМЕНА ОПЯТЬ ПОЯВЛЯЛИЬ!

И если что лишнее в коде найдёте напешите!

Заранее СПАСИБА! :)


;================================================= ===
Код:

Graphics3D 1024,768,32,1
 
l = CreateLight()
RotateEntity l, 0, 45, 45
level=LoadMesh ("C:\IGRA\MAPS\TUR.3ds")
grunt=LoadTexture("C:\IGRA\samples\anim\makbot\Panels.jpg")
EntityTexture level,grunt
PositionEntity level,0,-7,0
ry# = -8
dy# = 0
If KeyDown(57) Then
If ry# = -8 Then dy# = 0
EndIf
ry# = ry# + dy#
dy# = dy# - 0.1
If ry# < -8 Then ry# = -8: dy# = 0
robot = LoadAnimMesh( "C:\MODELI\My models\ROBOT\robotic.3ds" )
LoadAnimSeq robot, ("C:\MODELI\My models\ROBOT\running.3ds" )
ScaleEntity robot, 0.4, 0.4, 0.4
 
cam = CreateCamera(robot)
 
CameraRange cam, 5,2000
CameraFogColor cam, 0,128,255
CameraFogRange cam, 1,1000
 
 
PositionEntity cam, 0, 60, 40
RotateEntity cam, 30, 180, 0
EntityType robot,1
EntityRadius robot, 0
EntityType level,2
 
Collisions 1, 2,2, 2
 
 
cub=CreateCube()
PositionEntity cub,10,5,10
cub3=CreateCube()
PositionEntity cub3,10,5,-10
ScaleEntity cub3 ,10, 10, 10
cone=CreateCube()
PositionEntity cone,5,5,10
golova=CreateSphere ()
PositionEntity golova ,10,10,30
 
 
rx# = 10
ry# = -8
rz# = 30
dy# = 0
ang = 90
Repeat
PositionEntity robot, rx#, ry#, rz#
RotateEntity robot, 0, ang + 90, 0
If KeyDown(57) Then
If ry# = -8 Then dy# = 3
EndIf
ry# = ry# + dy#
dy# = dy# - 0.1
If ry# < -8 Then ry# = -8: dy# = 0
If KeyDown(17)
If AnimSeq(robot) = 0 Then Animate robot, 1, 0.5, 1, 10
rx# = rx# + Cos(ang) * 0.5
rz# = rz# + Sin(ang) * 0.5
Else
If AnimSeq(robot)=1 Then Animate robot, 2, 1, 0, 10
EndIf
 
qy#=-50
ey#=60
;======================================================================= ==
If anglex> ey# Then anglex=ey#
If anglex< qy# Then anglex=qy#
RotateEntity cam, anglex, 180, 0
;==============================
ang = ang - MouseXSpeed()/1.5
anglex=-MouseYSpeed()/2
 
;======================================================================= ==
PointEntity cam,robot
If KeyDown(44) Then MoveEntity cam,0,-0.5,0
If KeyDown(45) Then MoveEntity cam,0,0.5,0
If KeyDown (46) Then MoveEntity cam,0,0,-2
If KeyDown(47) Then MoveEntity cam,0,0,2
anglex=MouseYSpeed()
If anglex Then MoveEntity cam,0,0.5,0
 
anglexx=-MouseYSpeed()
 
MoveMouse GraphicsWidth()/2, GraphicsHeight()/2
If KeyDown(16) Then ang = ang + 3
If KeyDown (1 Then ang = ang - 3
If KeyDown (15) Then anglex = anglex + 3
If KeyDown(1) Then Exit
If KeyDown (2) TurnEntity cam,2,0,0
If KeyDown (42) Then CameraZoom cam, 1.5
If Not KeyDown (42) Then CameraZoom cam,1
If KeyDown (54) Then CameraFogMode cam,1
If Not KeyDown (54) Then CameraFogMode cam,0
UpdateWorld
RenderWorld
;----------------------------------------------------------------------- ------------------------
CameraProject(cam,EntityX(cone),EntityY(cone),EntityZ(cone)) 
If EntityInView(cone,cam)=True
Text ProjectedX#(),ProjectedY#(),"Bordos":Color 0, 0, 128
End If
;====================================================
CameraProject(cam,EntityX(cub),EntityY(cub),EntityZ(cub))
If EntityInView(cub,cam) = True
Text ProjectedX#(),ProjectedY#(),"Wiliams":Color 0, 128, 0
EndIf
;=====================================================
 
Flip
Forever
RenderWorld
Flip
WaitKey


SubZer0 19.09.2005 07:05

на первый вопрос:

Код:

; устанавливаем графический режим
graphics3d 800,600,32,2
; выставляем задний буфер для записи
setbuffer BackBuffer()

; создаем камеру и позиционируем ее так, чтоб нам было видно шарик
camera=createcamera()
positionentity camera,0,0,-50

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

; создаем шарик, чтоб нам было видно куда камера движется
createsphere()

; перемещаем курсор мыши в центр экрана (ВАЖНО) если без этой функции,
; то камера сначала делает рывок и мы можем не увидеть наш шарик
movemouse GraphicsWidth()/2,GraphicsHeight()/2

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

; заносим в переменные значения скорости движения мыши по Х Y и Z(колесико)
; скорость замеряется методом, на сколько шарик провернулся с тех пор
; как запрашивалась последняя скорость (по сравнению с предидущей итерацией)
 spy=MouseYSpeed()
 spx=MousexSpeed()
 spz=MousezSpeed()

; перемещаем камеру на значения скоростей мыши (множители тут для наглядности)
 moveentity camera,-spx*0.2,spy*0.2,spz*2

; перемещаем курсор мыши в середину экрана, если мы этого делать не будем,
; то камера будет двигаться пока курсор мыши не упрется в границу экрана
; (если тебе нужна мышь в игре, то придумай специальную функцию, чтоб
; мышью по экрану можно было водить, но чтоб она не достигала краев экрана)
 movemouse GraphicsWidth()/2,GraphicsHeight()/2

; прорисовываем мир и меняем буфера
 renderworld
 flip

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

; конец программы
end


SubZer0 19.09.2005 07:44

второй вопрос:

я с твоим кодом чето толком не разобрался... ты лучше запакуй код в маленький архив со всеми текстурами и моделями и прицепи к сообщению, можно до 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


SubZer0 19.09.2005 07:48

ну как?? помогло?? :) :) :rolleyes: :rolleyes:

KRIK 19.09.2005 12:16

Ну если чесно НУ ОЧЕНЬ СИЛЬНО ПОМОГЛО!!!!!!!!! :glag: :glag: :glag:


:)) :)) :))


Ну если чесно я чёто не понял как я запакованный файл прицеплю к соопщению? :dontknow:

SubZer0 19.09.2005 14:06

чето правда косяк какой-то... в других форумах можно прицеплять, а в этом нет.... разберемся... :)

спустя пару секунд

уже разобрался.... можно выливать... :) :)

KRIK 19.09.2005 14:53

КАК Я ТО НЕ ЗНАЮ??? :SOS:

ПОДСКАЖИКА НА ЧЁ НАЖАТЬ!!!

KRIK 19.09.2005 14:55

А ща скину погодь! :ok:

KRIK 19.09.2005 15:04

Вложений: 2
Сдесь находится файлы для :
Код:

robot = LoadAnimMesh( "C:\MODELI\My models\ROBOT\robotic.3ds" )
LoadAnimSeq robot, ("C:\MODELI\My models\ROBOT\running.3ds" )


KRIK 19.09.2005 15:06

Вложений: 2
Здесь для
Код:

grunt=LoadTexture("C:\IGRA\samples\anim\makbot\Panels.jpg")

KRIK 19.09.2005 15:07

Вложений: 2
И наконец здесь для
Код:

level=LoadMesh ("C:\IGRA\MAPS\TUR.3ds")

KRIK 19.09.2005 15:10

Ну вот я всё выложил, посмотри и чё там надо сделать как я писал изначально, напешии (КАК КОД ИЗМЕНИТЬТ!) Желательно весь код сразу напеши!

impersonalis 19.09.2005 16:40

конструкцию
Код:

movemouse GraphicsWidth()/2,GraphicsHeight()/2
следуект заменить на
Код:

movemouse GraphicsWidth()*.5,GraphicsHeight()*.5
уже обсуждалось почему

SubZer0 19.09.2005 17:14

Вложений: 2
изменил код, как и просили...

сам код:

Код:

Graphics3D 1024,768,32,1

l = CreateLight()
RotateEntity l, 0, 45, 45
level=LoadMesh ("MAPS\TUR.3ds")
grunt=LoadTexture("Panels.jpg")
EntityTexture level,grunt
PositionEntity level,0,-7,0
ry# = -8
dy# = 0
If KeyDown(57) Then
If ry# = -8 Then dy# = 0
EndIf
ry# = ry# + dy#
dy# = dy# - 0.1
If ry# < -8 Then ry# = -8: dy# = 0
robot = LoadAnimMesh( "ROBOT\robotic.3ds" )
LoadAnimSeq robot, ("ROBOT\running.3ds" )
ScaleEntity robot, 0.4, 0.4, 0.4


camobject=createsphere(4,robot)
entityalpha camobject,0
positionentity camobject,0,0,0

cam = CreateCamera(camobject)


CameraRange cam, 5,2000
CameraFogColor cam, 0,128,255
CameraFogRange cam, 1,1000
camerazoom cam,1
cZoom#=1

PositionEntity cam, 0, 60, 40
RotateEntity cam, 30, 180, 0
EntityType robot,1
EntityRadius robot, 0
EntityType level,2

Collisions 1, 2,2, 2


cub=CreateCube()
PositionEntity cub,10,5,10
cub3=CreateCube()
PositionEntity cub3,10,5,-10
ScaleEntity cub3 ,10, 10, 10
cone=CreateCube()
PositionEntity cone,5,5,10
;golova=CreateSphere ()
;PositionEntity golova ,10,10,30


entitypickmode cone,2
entitypickmode cub,2
entitypickmode cub3,2
entitypickmode robot,2

rx# = 10
ry# = -8
rz# = 30
dy# = 0
ang = 90
Repeat
PositionEntity robot, rx#, ry#, rz#
RotateEntity robot, 0, ang + 90, 0
If KeyDown(57) Then
If ry# = -8 Then dy# = 3
EndIf
ry# = ry# + dy#
dy# = dy# - 0.1
If ry# < -8 Then ry# = -8: dy# = 0
If KeyDown(17)
If AnimSeq(robot) = 0 Then Animate robot, 1, 0.5, 1, 10
rx# = rx# + Cos(ang) * 0.5
rz# = rz# + Sin(ang) * 0.5
Else
If AnimSeq(robot)=1 Then Animate robot, 2, 1, 0, 10
EndIf


angy#=MouseYSpeed()/2
moveEntity cam, 0, angy, 0


;==============================


ang = ang - MouseXSpeed()/1.5



;======================================================================= ==
PointEntity cam,robot
If KeyDown(44) Then MoveEntity cam,0,-0.5,0
If KeyDown(45) Then MoveEntity cam,0,0.5,0
If KeyDown (46) Then MoveEntity cam,0,0,-2
If KeyDown(47) Then MoveEntity cam,0,0,2

MoveMouse GraphicsWidth()/2, GraphicsHeight()/2

If KeyDown(203) Then ang = ang + 3
If KeyDown (205) Then ang = ang - 3
If KeyDown (208) Then anglex = anglex + 3
If KeyDown(1) Then Exit

cZoom=cZoom+MouseZSpeed()*0.5
camerazoom cam,cZoom


;If KeyDown (2) TurnEntity cam,2,0,0
;If KeyDown (42) Then CameraZoom cam, 1.5
;If Not KeyDown (42) Then CameraZoom cam,1
;If KeyDown (54) Then CameraFogMode cam,1
;If Not KeyDown (54) Then CameraFogMode cam,0


UpdateWorld
RenderWorld
;-----------------------------------------------------------------------------------------------
If EntityInView(cone,cam) And linepick(EntityX(cam,True),EntityY(cam,True),EntityZ(cam,True), EntityX(cone)-EntityX(cam,True),EntityY(cone)-EntityY(cam,True),EntityZ(cone)-EntityZ(cam,True))=cone
 cameraProject(cam,EntityX(cone),EntityY(cone),EntityZ(cone))
 Color 0, 0, 128 :Text ProjectedX#(),ProjectedY#(),"Bordos"
End If
;====================================================
If EntityInView(cub,cam) And linepick(EntityX(cam,True),EntityY(cam,True),EntityZ(cam,True), EntityX(cub)-EntityX(cam,True),EntityY(cub)-EntityY(cam,True),EntityZ(cub)-EntityZ(cam,True))=cub
 CameraProject(cam,EntityX(cub),EntityY(cub),EntityZ(cub))
 Color 0, 128, 0:Text ProjectedX#(),ProjectedY#(),"Wiliams"
EndIf
;=====================================================

Flip
Forever

end

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

alcosholik 19.09.2005 20:30

xxxKRIKxxx
Просьба запаковывать ВСЕ выкладываемые файлы в ОДИН архив.


Часовой пояс GMT +4, время: 04:14.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot