[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]


  • Страница 1 из 1
  • 1
Модератор форума: Spidy, turBO, blitz3d  
Форум мира Blitz3D » Язык Blitz3D » 3D программирование » Поворот мышкой (Ну понятно, делаю игру от третьего лица)
Поворот мышкой
odmentДата: Среда, 07.09.2011, 21:19 | Сообщение # 1
ламер
Группа: Пользователи
Сообщений: 8
Награды: 0
Репутация: 0
Статус: Offline
Делаю игрулю от третьего лица, и столкнулся с проблемой, что негде не объясняется как повернуть объект мышью, как в гта.
Очень надеюсь на помощь. sad
 
SpidyДата: Среда, 07.09.2011, 21:54 | Сообщение # 2
Полковник
Группа: Модераторы
Сообщений: 339
Награды: 6
Репутация: 13
Статус: Offline
Вот посмотри примерчик, а по поводу вопроса объясни что должно происходить с камерой и объектом.

Компьютерная мышь ночью собирает крошки у тебя со стола и прячет их в клавиатуру, делает запасы на зиму

Сообщение отредактировал Spidy - Среда, 07.09.2011, 22:01
 
odmentДата: Четверг, 08.09.2011, 06:55 | Сообщение # 3
ламер
Группа: Пользователи
Сообщений: 8
Награды: 0
Репутация: 0
Статус: Offline
То что в этом примере делаешь стрелками, мне надо сделать мышью.
 
MishanayCoolДата: Четверг, 08.09.2011, 11:36 | Сообщение # 4
разработчик
Группа: Пользователи
Сообщений: 226
Награды: 11
Репутация: 20
Статус: Offline
Так примерно:
Code
Global newvalue#,oldvalue#,increments,mx#,my#,camera,cube,pitch#,yaw#,cameraX#,cameraY#,cameraZ#,cx#,cz#
Global mousespeed#=.2,cameraspeed#=.5,camerasmoothness#=3

Graphics3D 800,600,0,2
SetBuffer BackBuffer()

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

Global hero=1,cam_hero=2,col=3

Arial=LoadFont("Arial",16,True,False,False)
SetFont Arial

light=CreateLight()
RotateEntity light,90,0,0

camera=CreateCamera()
EntityRadius camera,2
CameraRange camera,1,1000
EntityType camera,cam_hero

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

cube=CreateCube():ScaleEntity cube,1,2,1
PositionEntity cube,100,100,100
EntityRadius cube,2
EntityType cube,hero

terrain=LoadTerrain( "3iV82Lf9.bmp" )
EntityType terrain,col
PositionEntity terrain,0,-80,0
TerrainDetail terrain,4000,True
ScaleEntity terrain,1,110,1
grass_tex=LoadTexture( "ItoCCTVR.jpg" )
ScaleTexture grass_tex,55,55
EntityTexture terrain,grass_tex,0,1
Flip

Collisions hero,col,2,3
Collisions cam_hero,col,2,2
While Not KeyDown( 1 )

CameraMoveHero#(cube) ;в скобках указываем объект-родитель, к которому будет привязана камера

     UpdateWorld
     RenderWorld
Text 10,10,"camX#="+camX#
Text 10,25,"camY#="+camY#
Text 10,40,"camZ#="+camZ#
Text 10,55,"pitch#="+pitch#
Text 10,70,"yaw#="+yaw#

     Flip
Wend
End

Function CurveValue#(newvalue#,oldvalue#,increments )
If increments>1 oldvalue#=oldvalue#-(oldvalue#-newvalue#)/increments
If increments<=1 oldvalue=newvalue
Return oldvalue#
End Function

Function CameraMoveHero#(hero)
     mx#=CurveValue(MouseXSpeed()*mousespeed#,mx#,camerasmoothness#)
     my#=CurveValue(MouseYSpeed()*mousespeed#,my#,camerasmoothness#)
     MoveMouse GraphicsWidth()/2,GraphicsHeight()/2
     pitch#=EntityPitch(camera)
     yaw#=EntityYaw(camera)
     pitch#=pitch#+my#
     yaw#=yaw#-mx#
     If pitch#>89 pitch#=89
     If pitch#<-89 pitch#=-89
     RotateEntity camera,0,yaw#,0
     RotateEntity hero,0,yaw#,0
     TurnEntity camera,pitch#,0,0
     cx#=(KeyDown(32)-KeyDown(30))*cameraspeed#
     cz#=(KeyDown(17)-KeyDown(31))*cameraspeed#
     MoveEntity hero,cx#,0,cz#
     RotateEntity hero,0,yaw#,0
     TranslateEntity hero,0,-.3,0
     EntityType camera,0
     PositionEntity camera,EntityX#(hero),EntityY#(hero)+8,EntityZ#(hero)
     EntityType camera,cam_hero
     MoveEntity camera,0,-3,-15
     cameraX#=EntityX#(hero)
     cameraY#=EntityY#(hero)
     cameraZ#=EntityZ#(hero)
End Function


Вот картинки для тиррэйна, рядом с приложением положи.




MiniDemo3D - Blitz3D

Сообщение отредактировал MishanayCool - Четверг, 08.09.2011, 11:44
 
odmentДата: Четверг, 08.09.2011, 12:04 | Сообщение # 5
ламер
Группа: Пользователи
Сообщений: 8
Награды: 0
Репутация: 0
Статус: Offline
Спасибо Большущие biggrin hands , а курсор как скрыть?

Сообщение отредактировал odment - Четверг, 08.09.2011, 12:14
 
MishanayCoolДата: Четверг, 08.09.2011, 12:13 | Сообщение # 6
разработчик
Группа: Пользователи
Сообщений: 226
Награды: 11
Репутация: 20
Статус: Offline
Quote
а курсор как скрыть?

HidePointer
Если в полный экран (Graphics3D 800,600,0,1) , то курсора не будет и без этой команды.
Вообще этот вариант не совсем как в GTA, в игре камера не привязана жёстко к спине.
Так правильней:
Code
Global newvalue#,oldvalue#,increments,mx#,my#,camera,cube,pitch#,yaw#,cameraX#,cameraY#,cameraZ#,cx#,cz#
Global mousespeed#=.2,cameraspeed#=.5,camerasmoothness#=3

Graphics3D 800,600,0,1
SetBuffer BackBuffer()

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

Global hero=1,cam_hero=2,col=3

Arial=LoadFont("Arial",16,True,False,False)
SetFont Arial

light=CreateLight()
RotateEntity light,90,0,0

camera=CreateCamera()
EntityRadius camera,2
CameraRange camera,1,1000
EntityType camera,cam_hero

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

cube=CreateCube():ScaleEntity cube,1,2,1
PositionEntity cube,100,100,100
EntityRadius cube,2
EntityType cube,hero

terrain=LoadTerrain( "3iV82Lf9.bmp" )
EntityType terrain,col
PositionEntity terrain,0,-80,0
TerrainDetail terrain,4000,True
ScaleEntity terrain,1,110,1
grass_tex=LoadTexture( "ItoCCTVR.jpg" )
ScaleTexture grass_tex,55,55
EntityTexture terrain,grass_tex,0,1
Flip

Collisions hero,col,2,3
Collisions cam_hero,col,2,2
While Not KeyDown( 1 )

CameraMoveHero#(cube)

     UpdateWorld
     RenderWorld
Text 10,10,"camX#="+camX#
Text 10,25,"camY#="+camY#
Text 10,40,"camZ#="+camZ#
Text 10,55,"pitch#="+pitch#
Text 10,70,"yaw#="+yaw#

     Flip
Wend

End

Function CurveValue#(newvalue#,oldvalue#,increments )
If increments>1 oldvalue#=oldvalue#-(oldvalue#-newvalue#)/increments
If increments<=1 oldvalue=newvalue
Return oldvalue#
End Function

Function CameraMoveHero#(hero)

     mx#=CurveValue(MouseXSpeed()*mousespeed#,mx#,camerasmoothness#)
     my#=CurveValue(MouseYSpeed()*mousespeed#,my#,camerasmoothness#)
     MoveMouse GraphicsWidth()/2,GraphicsHeight()/2
     pitch#=EntityPitch(camera)
     yaw#=EntityYaw(camera)
     pitch#=pitch#+my#
     yaw#=yaw#-mx#
     If pitch#>89 pitch#=89
     If pitch#<-89 pitch#=-89
     RotateEntity camera,0,yaw#,0
     TurnEntity camera,pitch#,0,0

     If KeyDown(17) Then MoveEntity hero,0,0,.5
     If KeyDown(31) Then MoveEntity hero,0,0,-.25
     If KeyDown(32) Then TurnEntity hero,0,-3,0
     If KeyDown(30) Then TurnEntity hero,0,3,0

     TranslateEntity hero,0,-.3,0
     EntityType camera,0
     PositionEntity camera,EntityX#(hero),EntityY#(hero)+8,EntityZ#(hero)
     EntityType camera,cam_hero
     MoveEntity camera,0,-3,-15
     cameraX#=EntityX#(hero)
     cameraY#=EntityY#(hero)
     cameraZ#=EntityZ#(hero)
End Function


MiniDemo3D - Blitz3D

Сообщение отредактировал MishanayCool - Четверг, 08.09.2011, 20:09
 
odmentДата: Четверг, 08.09.2011, 16:08 | Сообщение # 7
ламер
Группа: Пользователи
Сообщений: 8
Награды: 0
Репутация: 0
Статус: Offline
Оно не удобное, а вообще где ты этому научился?

Сообщение отредактировал odment - Четверг, 08.09.2011, 16:39
 
MishanayCoolДата: Четверг, 08.09.2011, 19:55 | Сообщение # 8
разработчик
Группа: Пользователи
Сообщений: 226
Награды: 11
Репутация: 20
Статус: Offline
Quote
Оно не удобное

Просто в GTA, когда двигаешь героем(клавишами), камера плавно отходит к спине(хотя сейчас у меня, игр от третьего лица не установлено, может я ошибаюсь).
Значит используй первый вариант, кому-то возможно больше подойдёт второй.

Quote
где ты этому научился?

Сам Blitz3D изучал в домашних условиях, а код...
Просто подумал happy

Кстати тут ещё пару идей, довести код до ума, но если тебя всё устраивает, то я закончил biggrin



MiniDemo3D - Blitz3D

Сообщение отредактировал MishanayCool - Пятница, 09.09.2011, 07:13
 
odmentДата: Пятница, 09.09.2011, 18:30 | Сообщение # 9
ламер
Группа: Пользователи
Сообщений: 8
Награды: 0
Репутация: 0
Статус: Offline
Спасибо за помощь, какие игры ты уже сделал? Исходники можешь дать?
 
MishanayCoolДата: Суббота, 10.09.2011, 22:56 | Сообщение # 10
разработчик
Группа: Пользователи
Сообщений: 226
Награды: 11
Репутация: 20
Статус: Offline
Quote
какие игры ты уже сделал?

Только демошки, на большее к сожалению терпелки не хватает. wink


MiniDemo3D - Blitz3D
 
Форум мира Blitz3D » Язык Blitz3D » 3D программирование » Поворот мышкой (Ну понятно, делаю игру от третьего лица)
  • Страница 1 из 1
  • 1
Поиск: