Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D > 3D-программирование

3D-программирование Вопросы, касающиеся программирования 3D мира

Ответ
 
Опции темы
Старый 19.09.2005, 04:55   #1
KRIK
Бывалый
 
Регистрация: 19.09.2005
Сообщений: 649
Написано 3 полезных сообщений
(для 3 пользователей)
ОБЪЯСНЯЮ ПОДРОБНО, ЧТО МНЕ НАДО!

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
(Offline)
 
Ответить с цитированием
Старый 19.09.2005, 07:05   #2
SubZer0
Администратор
 
Аватар для SubZer0
 
Регистрация: 03.09.2005
Сообщений: 2,408
Написано 301 полезных сообщений
(для 996 пользователей)
на первый вопрос:

; устанавливаем графический режим
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
__________________
Как минимум я помог многим (с)
(Offline)
 
Ответить с цитированием
Старый 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)
 
Ответить с цитированием
Старый 19.09.2005, 07:48   #4
SubZer0
Администратор
 
Аватар для SubZer0
 
Регистрация: 03.09.2005
Сообщений: 2,408
Написано 301 полезных сообщений
(для 996 пользователей)
ну как?? помогло??
__________________
Как минимум я помог многим (с)
(Offline)
 
Ответить с цитированием
Старый 19.09.2005, 12:16   #5
KRIK
Бывалый
 
Регистрация: 19.09.2005
Сообщений: 649
Написано 3 полезных сообщений
(для 3 пользователей)
Ну если чесно НУ ОЧЕНЬ СИЛЬНО ПОМОГЛО


) ) )


Ну если чесно я чёто не понял как я запакованный файл прицеплю к соопщению?
(Offline)
 
Ответить с цитированием
Старый 19.09.2005, 14:06   #6
SubZer0
Администратор
 
Аватар для SubZer0
 
Регистрация: 03.09.2005
Сообщений: 2,408
Написано 301 полезных сообщений
(для 996 пользователей)
чето правда косяк какой-то... в других форумах можно прицеплять, а в этом нет.... разберемся...

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

уже разобрался.... можно выливать...
__________________
Как минимум я помог многим (с)
(Offline)
 
Ответить с цитированием
Старый 19.09.2005, 14:53   #7
KRIK
Бывалый
 
Регистрация: 19.09.2005
Сообщений: 649
Написано 3 полезных сообщений
(для 3 пользователей)
КАК Я ТО НЕ ЗНАЮ???

ПОДСКАЖИКА НА ЧЁ НАЖАТЬ
(Offline)
 
Ответить с цитированием
Старый 19.09.2005, 14:55   #8
KRIK
Бывалый
 
Регистрация: 19.09.2005
Сообщений: 649
Написано 3 полезных сообщений
(для 3 пользователей)
А ща скину погодь!
(Offline)
 
Ответить с цитированием
Старый 19.09.2005, 15:04   #9
KRIK
Бывалый
 
Регистрация: 19.09.2005
Сообщений: 649
Написано 3 полезных сообщений
(для 3 пользователей)
Сдесь находится файлы для :
robot = LoadAnimMesh( "C:\MODELI\My models\ROBOT\robotic.3ds" ) 
LoadAnimSeq robot, ("C:\MODELI\My models\ROBOT\running.3ds" )
(Offline)
 
Ответить с цитированием
Старый 19.09.2005, 15:06   #10
KRIK
Бывалый
 
Регистрация: 19.09.2005
Сообщений: 649
Написано 3 полезных сообщений
(для 3 пользователей)
Здесь для
grunt=LoadTexture("C:\IGRA\samples\anim\makbot\Panels.jpg")
(Offline)
 
Ответить с цитированием
Старый 19.09.2005, 15:07   #11
KRIK
Бывалый
 
Регистрация: 19.09.2005
Сообщений: 649
Написано 3 полезных сообщений
(для 3 пользователей)
И наконец здесь для
level=LoadMesh ("C:\IGRA\MAPS\TUR.3ds")
(Offline)
 
Ответить с цитированием
Старый 19.09.2005, 15:10   #12
KRIK
Бывалый
 
Регистрация: 19.09.2005
Сообщений: 649
Написано 3 полезных сообщений
(для 3 пользователей)
Ну вот я всё выложил, посмотри и чё там надо сделать как я писал изначально, напешии (КАК КОД ИЗМЕНИТЬТ!) Желательно весь код сразу напеши!
(Offline)
 
Ответить с цитированием
Старый 19.09.2005, 16:40   #13
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Смущение

конструкцию
movemouse GraphicsWidth()/2,GraphicsHeight()/2
следуект заменить на
movemouse GraphicsWidth()*.5,GraphicsHeight()*.5
уже обсуждалось почему
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 19.09.2005, 17:14   #14
SubZer0
Администратор
 
Аватар для SubZer0
 
Регистрация: 03.09.2005
Сообщений: 2,408
Написано 301 полезных сообщений
(для 996 пользователей)
изменил код, как и просили...

сам код:

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
а тут можешь скачать рабочую версию.... там только с Зумом поиграться надо, чтоб настроить
__________________
Как минимум я помог многим (с)
(Offline)
 
Ответить с цитированием
Старый 19.09.2005, 20:30   #15
alcosholik
 
Сообщений: n/a
xxxKRIKxxx
Просьба запаковывать ВСЕ выкладываемые файлы в ОДИН архив.
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужна помощь Larsus Delphi 14 07.08.2010 13:11
ОООчень нужна помощь. Slepetc PureBasic 6 23.01.2009 21:13
Нужна помощь... Черный крыс PureBasic 2 01.09.2007 17:56
Нужна Помощь johnk Blitz3D 32 22.03.2007 17:33
Нужна помощь! ingko Болтовня 6 23.10.2006 09:58


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com