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

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

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

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

Ответ
 
Опции темы
Старый 07.03.2007, 18:30   #1
Fant
Бывалый
 
Регистрация: 05.09.2005
Сообщений: 623
Написано 4 полезных сообщений
(для 5 пользователей)
Передвижение игрока

Вообщем хочу посоветоавться как лучше всего перемещать игрока.

Вот такое игровое поле будет:
 
Type Camera
Field Obj
End Type 
Type Land
Field Obj
End Type

Const UPS=30
Graphics3D 640,480,16,2
SetBuffer BackBuffer()
SeedRnd MilliSecs() 
HidePointer ()
MoveMouse GraphicsWidth()/2,GraphicsHeight()/2

font_Main=LoadFont("arial",16)
SetFont font_Main 

fnCreateTerrain()
fncreateCam1.camera()
l=CreateLight()
RotateEntity l,90,0,0
period=1000/UPS
time=MilliSecs()-period
Repeat
 Repeat
  elapsed=MilliSecs()-time
 Until elapsed
 ticks=elapsed/period
 tween#=Float(elapsed Mod period)/Float(period)
 
 For k=1 To ticks
  time=time+period 
 Cls
 Delay 5
 
fnCamera_Look(camera)
fnCamera_Free_Fly(camera)
 
If KeyHit(1)
 FreeFont font_main

 ClearWorld()
 Delay 300
 End 
End If
  UpdateWorld 
 Next
 RenderWorld tween

 Flip
Forever
Function fnCreateCam1.camera()
Local cam1.camera
cam1 = New Camera
cam1\obj=CreateCamera()
PositionEntity cam1\obj,0,2,0
RotateEntity cam1\obj,20,-45,0
CameraRange cam1\obj,.1,35
CameraClsColor cam1\obj ,255,255,255
CameraFogMode cam1\obj,1
CameraFogRange cam1\obj,1,100
CameraFogColor cam1\obj,255,255,255
Return cam1
End Function
Function fnCamera_Look(cam,speedx#=2,speedy#=2,dang=-89,upang=89)
For cam1.camera=Each camera
 mxs=MouseXSpeed()
 mys=MouseYSpeed()
 xrot#=EntityPitch(cam1\obj)
 yrot#=EntityYaw(cam1\obj)
 If(xrot#<upang)And(mys>0)Then xrot#=xrot#+speedx#*mys/10  
 If(xrot#>upang)And(mys>0)Then xrot#=upang 
 If(xrot#>dang)And(mys<0)Then xrot#=xrot#+speedx#*mys/10 
 If(xrot#<dang)And(mys<0)Then xrot#=dang  
 yrot=yrot-speedy#*mxs/10 
 MoveMouse GraphicsWidth()/2,GraphicsHeight()/2
 RotateEntity cam1\obj,xrot,yrot,0
Next
End Function
Function fnCamera_Free_Fly(Obj,mf#=.5,mb#=.5,ml#=.5,mr#=.5)
For cam1.camera=Each camera
 If MouseDown(1) Then MoveEntity cam1\obj,  0 ,0, mf#;W
 If MouseDown(2) Then MoveEntity cam1\obj,  0 ,0,-mb#;S 
 If KeyDown(30) Then MoveEntity Obj,-ml#,0,  0 ;A
 If KeyDown(32) Then MoveEntity Obj, mr#,0,  0 ;D

 Next
End Function
Function fnDeleteCam()
For cam1.camera = Each camera
 FreeEntity cam1\obj
Delete cam1
  Next
End Function 
Function fnCreateTerrain(size=32,zoom#=.35,minVal#=0,maxVal#=1)
grass_tex=CreateTexture( 128,128 )
 SetBuffer TextureBuffer(grass_tex) 
  ClsColor 255,255,255 
   Cls 
For a=0 To 128
For b=0 To 128
     Color Rand(0,16),Rand(64,128),Rand(0,4)
    Plot a,b
Next
Next
SetBuffer BackBuffer()
Local ter.land
ter=New land
ter\obj=CreateTerrain (size)
SeedRnd 100
For x=0 To size
     For z=0 To size
          height#=Rnd (minVal,maxVal)
          ModifyTerrain ter\obj,x,z,height    
     Next   
Next
EntityTexture ter\obj,grass_tex
ScaleEntity ter\obj,1,zoom,1
FreeTexture grass_tex
Return ter\obj
End Function
как видно из семпла, то нетрудно догадаться, что ландшаф не прямой. У меня есть хороший пример как перемещать игрока и не один, но у меня тут возникли вопросы

1. Так как ландшафт не прямой, хотелось бы что бы объект, который пеемещается по тему, "точно как в жизни", пападал в ямки и выходил из нее. Ест ьу меня пример. называется driver. - Но как лучше (проще) всего сделать такое перемещение? Ведь у еня не будет ни заносов...ни чего бы то не было более сложного.

2. Наверное придется в игре ИИ писать. Я бы хотел заранее, что бы игрок после перемещения. (например от переместился в точку с координатой по X=134.4) ставал в точку x=134.(то есть округлять координаты). Мне такой пример писали. ам все сделанно по массивам. А есть еще варианты?

3. Может что бы не заморачиваться сделать передвжение только вперед, назад, влево, вправо (без возможности крутиться на все 360 градусов)

Вообщем так или иначе я не знаю как лучше всего всеэто сделать и поэтому...
Поэтому спрашиваю!
(Offline)
 
Ответить с цитированием
Старый 07.03.2007, 21:14   #2
ЛысыЙ_Чук-Иванчук
Дэвелопер
 
Регистрация: 19.03.2006
Сообщений: 1,241
Написано 10 полезных сообщений
(для 17 пользователей)
Re: Передвижение игрока

Из примера непонятно какого имено характера тебе нужен игрок(обычный чел, ну там машина(стиральная)
If обычный игрок(ну как в контре) то зачем тебе его ровнять по ладшафту
ElseIf Если какойнибуть робот, мне кажется лутше физику использовать
Else Если как в примере самолетики, ну тут я помочь ничем немогу=)
endIF
(Offline)
 
Ответить с цитированием
Старый 07.03.2007, 21:17   #3
Fant
Бывалый
 
Регистрация: 05.09.2005
Сообщений: 623
Написано 4 полезных сообщений
(для 5 пользователей)
Re: Передвижение игрока

Сообщение от vlad
Из примера непонятно какого имено характера тебе нужен игрок(обычный чел, ну там машина(стиральная)
If обычный игрок(ну как в контре) то зачем тебе его ровнять по ладшафту
ElseIf Если какойнибуть робот, мне кажется лутше физику использовать
Else Если как в примере самолетики, ну тут я помочь ничем немогу=)
endIF
у меня игрок - квадратик

Его нужно равнять по ландшафту)
(Offline)
 
Ответить с цитированием
Старый 07.03.2007, 22:04   #4
axel186
Знающий
 
Регистрация: 07.09.2005
Сообщений: 238
Написано 2 полезных сообщений
(для 2 пользователей)
Re: Передвижение игрока

PhysX РУЛИТ! Ну или что-то другое попробуй, сам замучаешся да ещё и не точно будет выходить... а тут, физический движок и всё =)
(Offline)
 
Ответить с цитированием
Старый 07.03.2007, 22:39   #5
ЛысыЙ_Чук-Иванчук
Дэвелопер
 
Регистрация: 19.03.2006
Сообщений: 1,241
Написано 10 полезных сообщений
(для 17 пользователей)
Re: Передвижение игрока

Можно просто ровнять по вектору, но я бы использовал физ двиг...
(Offline)
 
Ответить с цитированием
Старый 08.03.2007, 01:10   #6
Fant
Бывалый
 
Регистрация: 05.09.2005
Сообщений: 623
Написано 4 полезных сообщений
(для 5 пользователей)
Re: Передвижение игрока

Нет, нет! Ребята! Зачем мне физ. двиг что бы "приклеить" квадратик к ладншафту? Мне же ненужна суперфизика
(Offline)
 
Ответить с цитированием
Старый 08.03.2007, 09:07   #7
Nahim
AnyKey`щик
 
Регистрация: 19.08.2006
Сообщений: 12
Написано 0 полезных сообщений
(для 0 пользователей)
Re: Передвижение игрока

Fant, а чем тебя не устраивает AlignToVector?
С помощью CollisionNX, CollisionNY, CollisionNZ находишь координаты нормали коллизии и выравниваешь объект:

For k=1 To CountCollisions(obj)
AlignToVector obj,CollisionNX(obj,k),CollisionNY(obj,k),CollisionNZ(obj,k),2,0.1
Next
(Offline)
 
Ответить с цитированием
Старый 08.03.2007, 09:27   #8
ЛысыЙ_Чук-Иванчук
Дэвелопер
 
Регистрация: 19.03.2006
Сообщений: 1,241
Написано 10 полезных сообщений
(для 17 пользователей)
Re: Передвижение игрока

AlignToVector-Поможет тебе выровнять его, но если ты хочеш чтобы в ямочки проваливался- то только физДвиг
ЗЫ\ А почему ты его нехочеш использовать, веть там нет ничего сложного
(Offline)
 
Ответить с цитированием
Старый 08.03.2007, 10:31   #9
Fant
Бывалый
 
Регистрация: 05.09.2005
Сообщений: 623
Написано 4 полезных сообщений
(для 5 пользователей)
Сообщение от Nahim
Fant, а чем тебя не устраивает AlignToVector?
С помощью CollisionNX, CollisionNY, CollisionNZ находишь координаты нормали коллизии и выравниваешь объект:

For k=1 To CountCollisions(obj)
AlignToVector obj,CollisionNX(obj,k),CollisionNY(obj,k),CollisionNZ(obj,k),2,0.1
Next
Спасибо! Я попробую с помощью этой команды!

Сообщение от vlad
AlignToVector-Поможет тебе выровнять его, но если ты хочеш чтобы в ямочки проваливался- то только физДвиг
ЗЫ\ А почему ты его нехочеш использовать, веть там нет ничего сложного
Потому, что физический движек несколько сложен, а для простого "прилипания" объекта к ландшафту - это слишком!

AlingTovector попробую поюзать!
(Offline)
 
Ответить с цитированием
Старый 08.03.2007, 18:25   #10
Fant
Бывалый
 
Регистрация: 05.09.2005
Сообщений: 623
Написано 4 полезных сообщений
(для 5 пользователей)
Re: Передвижение игрока

Всем спасибо за обсуждения и поддержку! Я разобрался!
(Offline)
 
Ответить с цитированием
Старый 08.03.2007, 18:33   #11
tormoz
Гигант индустрии
 
Аватар для tormoz
 
Регистрация: 14.12.2005
Сообщений: 2,785
Написано 1,183 полезных сообщений
(для 4,437 пользователей)
Re: Передвижение игрока

Получай высоту террайна в точке нахождения игрока и ставь его туда.
__________________
(Offline)
 
Ответить с цитированием
Старый 08.03.2007, 19:33   #12
Fant
Бывалый
 
Регистрация: 05.09.2005
Сообщений: 623
Написано 4 полезных сообщений
(для 5 пользователей)
Re: Передвижение игрока

Я сделал по примеру driver, но у меня почему-то эти "колесики" держат объект над землей...я не опнимаю, в чем дело? Есть предложения?
(Offline)
 
Ответить с цитированием
Старый 08.03.2007, 20:00   #13
Nahim
AnyKey`щик
 
Регистрация: 19.08.2006
Сообщений: 12
Написано 0 полезных сообщений
(для 0 пользователей)
Re: Передвижение игрока

А какой у тебя объект? Может не стоит использовать "колёсики", если они тебе не нужны... Выравнивай непосредственно свой объект.
(Offline)
 
Ответить с цитированием
Старый 08.03.2007, 20:03   #14
Fant
Бывалый
 
Регистрация: 05.09.2005
Сообщений: 623
Написано 4 полезных сообщений
(для 5 пользователей)
Re: Передвижение игрока

Сообщение от Nahim
А какой у тебя объект? Может не стоит использовать "колёсики", если они тебе не нужны... Выравнивай непосредственно свой объект.
Квадратик у меня. Он должен "прилипать к ландшафту"

Но как его выравнивать-то?
(Offline)
 
Ответить с цитированием
Старый 08.03.2007, 20:17   #15
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Re: Передвижение игрока

Немного над ландшафтом? Там коллизии? Может не точно указан Радиус элипсоида? Попробуй EntityRadius на колёсики.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ландшафт (передвижение) Dakar 3D-программирование 7 18.09.2009 20:03
передвижение по списку Illidan BlitzMax 6 31.08.2009 23:06
помогите! передвижение спрайта Jlemyp 2D-программирование 10 21.06.2009 21:09
Передвижение бота из пункта А в пункт В по вейпоинтам. Crystal 3D-программирование 17 14.12.2007 21:24
Реализация игрока в FPS X-Ranger 3D-программирование 7 06.03.2007 02:09


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


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