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


  • Страница 1 из 1
  • 1
Модератор форума: Spidy, turBO, blitz3d  
Форум мира Blitz3D » Язык Blitz3D » 3D программирование » Гравитация и прыжок!
Гравитация и прыжок!
DarkHunterДата: Воскресенье, 08.05.2011, 12:28 | Сообщение # 1
ламер
Группа: Пользователи
Сообщений: 38
Награды: 1
Репутация: 0
Статус: Offline
Я пытался сделать гравитацию и прыжок. Но почемуто герой проваливается сквозь терраин.
Code
Graphics3D 800,600,32
SetBuffer BackBuffer()
Const TypePlayer=1,TypeTerrain=2
;Create Player
Player=CreateSphere()
EntityRadius Player,1,1
EntityType Player,TypePlayer
PositionEntity Player,0,10,0
;RotateEntity Player,0,90,0
PlayerTexture=LoadTexture("NPC\Player\Player.png")
EntityTexture Player,PlayerTexture
ScaleEntity Player,1,1,1
;Create Camera
Cam=CreateCamera(Player)
PointEntity cam,player
PositionEntity Cam,0,3,-8
;AmbientLight
AmbientLight 255,255,255
;Create Terrain
Terrain=CreatePlane()
TerrainTexture=LoadTexture("Textures\grass.png")
ScaleTexture TerrainTexture,100,100
EntityTexture Terrain,TerrainTexture
EntityType Terrain,TypeTerrain
Collisions TypePlayer,TypeTerrain,1,1
While Not KeyDown(1)
If KeyDown(200) Then MoveEntity player,0,0,1
If KeyDown(203) Then TurnEntity player,0,1,0
If KeyDown(205) Then TurnEntity player,0,-1,0
If KeyDown(208) Then MoveEntity player,0,0,-1
If KeyDown(67) Then MoveEntity player,0,10,0

TranslateEntity Player,0,-1,0
UpdateWorld
RenderWorld
Flip
Wend   
End

Добавлено (08.05.2011, 12:28)
---------------------------------------------
Всё всё исправил. Можно я буду здесь все свои вопросы задавать чтобы кучу тем не плодить?

Сообщение отредактировал DarkHunter - Воскресенье, 08.05.2011, 12:26
 
ParisHiltonДата: Воскресенье, 08.05.2011, 13:26 | Сообщение # 2
прогер
Группа: Пользователи
Сообщений: 197
Награды: 2
Репутация: 5
Статус: Offline
Уж если сам нашел ошибку, соизволь написать в чем была ошибка, чтобы на те же грабли не наступали другие

Мы ищем предмет цели для того чтобы найти результаты его следствия
 
DarkHunterДата: Воскресенье, 08.05.2011, 15:48 | Сообщение # 3
ламер
Группа: Пользователи
Сообщений: 38
Награды: 1
Репутация: 0
Статус: Offline
Да я ступил, поставил у игрока(сфера) тип колизии эллипсоид к эллипсоиду, а надо эллипсоид к полигону. А теперь у меня другая проблема... Немогу прикрутить анимацию:
Code
Graphics3D 800,600,32
SetBuffer BackBuffer()
Const TypePlayer=1,TypeTerrain=2
;Create Player
Player=LoadAnimMesh("NPC\Player\Player.b3d")
Jump=0
ExtractAnimSeq(player,1,1);Stand
ExtractAnimSeq(player,1,10);Walk
ExtractAnimSeq(player,11,20);Jump
;EntityRadius Player,1,1
EntityType Player,TypePlayer
PositionEntity Player,0,10,0    
PlayerTexture=LoadTexture("NPC\Player\Player.png")
EntityTexture Player,PlayerTexture
;ScaleEntity Player,0.01,0.01,0.01
;Create Camera
Cam=CreateCamera(Player)
PositionEntity Cam,0,30,-80
;AmbientLight
AmbientLight 255,255,255
;Create Terrain
Terrain=CreatePlane()
TerrainTexture=LoadTexture("Textures\grass.png")
ScaleTexture TerrainTexture,100,100
EntityTexture Terrain,TerrainTexture
EntityType Terrain,TypeTerrain
Collisions TypePlayer,TypeTerrain,2,3
While Not KeyDown(1)
If KeyDown(200) Then MoveEntity player,0,0,0.8 Animate Player,3,1,1,2
If KeyDown(203) Then TurnEntity player,0,1,0
If KeyDown(205) Then TurnEntity player,0,-1,0
If KeyDown(208) Then MoveEntity player,0,0,-0.8
If KeyHit(57) And jump=0 Then TranslateEntity player,0,50,0 Jump=1
If EntityCollided(Player,TypeTerrain) Then Jump=0 Animate Player,3,1,1,1
Animate Player,2,1,1,1
TranslateEntity Player,0,-1,0

UpdateWorld
RenderWorld
Flip
Wend    

Code
Graphics3D 800,600,32
SetBuffer BackBuffer()
Const TypePlayer=1,TypeTerrain=2
;Create Player
Player=LoadMD2("NPC\Player\Player.md2")
state=0
Jump=0
EntityType Player,TypePlayer
PositionEntity Player,0,10,0    
PlayerTexture=LoadTexture("NPC\Player\Player.png")
EntityTexture Player,PlayerTexture
;ScaleEntity Player,0.01,0.01,0.01
;Create Camera
Cam=CreateCamera()
PositionEntity Cam,0,30,-80
;AmbientLight
AmbientLight 255,255,255
;CreateTerrain
Terrain=CreatePlane()
TerrainTexture=LoadTexture("Textures\grass.png")
ScaleTexture TerrainTexture,100,100
EntityTexture Terrain,TerrainTexture
EntityType Terrain,TypeTerrain
Collisions TypePlayer,TypeTerrain,2,3
While Not KeyDown(1)
If KeyDown(200) Then MoveEntity player,0,0,0.8 AnimateMD2 player,1,1,1,10
If KeyDown(203) Then TurnEntity player,0,1,0
If KeyDown(205) Then TurnEntity player,0,-1,0
If KeyDown(208) Then MoveEntity player,0,0,-0.8
If KeyHit(57) And jump=0 Then TranslateEntity player,0,50,0 Jump=1
If EntityCollided(Player,TypeTerrain) Then Jump=0 State=0
;Gravity
TranslateEntity Player,0,-1,0
;Animation
If State=0 Then AnimateMD2 player,1,1,1,2,1
UpdateWorld
RenderWorld
Flip
Wend    
End

Перенёс героя в MD2, но анимация всё равно непрёт! Проблема в том что анимированные обьекты не колизяться?


Сообщение отредактировал DarkHunter - Воскресенье, 08.05.2011, 15:53
 
MishanayCoolДата: Воскресенье, 08.05.2011, 16:28 | Сообщение # 4
разработчик
Группа: Пользователи
Сообщений: 226
Награды: 11
Репутация: 20
Статус: Offline
Чтобы коллизить анимированные объекты создай невидимую точку,
И припаренти(Связать объекты как одно целое) её к анимации
Code
point=CreatePivot() ;заводим невидимую точку
EntityParent entity , point ;где entity твоя анимация

И установи коллизию на точку.
Сейчас код наклепаю или сам разберёшься!?


MiniDemo3D - Blitz3D
 
DarkHunterДата: Воскресенье, 08.05.2011, 16:32 | Сообщение # 5
ламер
Группа: Пользователи
Сообщений: 38
Награды: 1
Репутация: 0
Статус: Offline
MishanayCool, Код наклепай, ничо непонял. У меня же вся аниация в 1 файле.
 
MishanayCoolДата: Воскресенье, 08.05.2011, 18:57 | Сообщение # 6
разработчик
Группа: Пользователи
Сообщений: 226
Награды: 11
Репутация: 20
Статус: Offline
Держи
Code

Global player,Terrain,cam,camX#,camY#,camZ#,camPtch#,camYaw#,camRoll#,up#=0
Glоbal state=0,jump=0
Graphics3D 800,600,32,2
SetBuffer BackBuffer()
Const TypePlayer=1,TypeTerrain=2
;Делаю игрока
Player=LoadMD2("NPC\Player\Player.md2")
PositionEntity player,0,0,0
EntityType Player,TypePlayer
PositionEntity Player,0,50,0  

PlayerTexture=LoadTexture("NPC\Player\Player.png")
EntityTexture Player,PlayerTexture
;Создаю камеру
Cam=CreateCamera()
PositionEntity Cam,0,150,-100
TurnEntity cam,30,0,0
;Свет
AmbientLight 255,255,255
;Террайн!
Terrain=CreatePlane()
TerrainTexture=LoadTexture("Textures\grass.png")
ScaleTexture TerrainTexture,100,100
EntityTexture Terrain,TerrainTexture
EntityType Terrain,TypeTerrain
EntityPickMode Terrain,2 ;вставлять такую строчку для столкновения героя с plane

Collisions TypePlayer,TypeTerrain,2,3
While Not KeyDown(1)
If KeyDown(200) Then MoveEntity player,0,0,1
If KeyDown(203) Then TurnEntity player,0,1,0
If KeyDown(205) Then TurnEntity player,0,-1,0
If KeyDown(208) Then MoveEntity player,0,0,-0.8
If KeyDown(57) And jump=0 Then jump=1
MovePlayerAnimation() ;Анимация героя при движении
JumpPlayer(30) ;Прыжок героя где (30) высота прыжка
Gravity(-1); Сила притяжения героя, значение только меньше нуля

UpdateWorld()
RenderWorld()
Flip
Wend  
End

Function Gravity(PowerGravity#)
If jump=0 Then TranslateEntity Player,0,PowerGravity#,0
End Function

Function MovePlayerAnimation()
If state=0 And KeyDown(200) Then
AnimateMD2 player,2,.3,1,10,0:state=1
EndIf
state=0
If KeyDown(200) Then state=1
If MD2AnimTime ( player )>9.9 Or state=0 Then state=0:AnimateMD2 player,0,0,0,0,0
End Function

Function JumpPlayer(height_jumping)
If jump=1 Then
TranslateEntity player,0,2,0
up#=up#+1:If up#>height_jumping Then jump=2
EndIf
If jump=2 Then
TranslateEntity player,0,-2,0
camX#=EntityX#(Cam):camY#=EntityY#(Cam):camZ#=EntityZ#(Cam)
camPtch#=EntityPitch#(Cam):camYaw#=EntityYaw#(Cam):camRoll#=Enti tyRoll#(Cam)
PositionEntity cam,EntityX#(player),EntityY#(player),EntityZ#(player)
RotateEntity cam,90,0,0
CameraPick(cam,GraphicsWidth()/2,GraphicsHeight()/2)
If EntityY#(player)-PickedY#()<2 Then jump=0
PositionEntity cam,camX#,camY#,camZ#
RotateEntity cam,camPtch#,camYaw#,camRoll#
up#=0
EndIf
End Function

С командой EntityCollided были проблемы, поэтому пошёл другим путём biggrin


MiniDemo3D - Blitz3D
 
DarkHunterДата: Понедельник, 09.05.2011, 15:55 | Сообщение # 7
ламер
Группа: Пользователи
Сообщений: 38
Награды: 1
Репутация: 0
Статус: Offline
Другой путь тоже неплохой. Возникли проблемы с понимаем этих строчек:
Quote (MishanayCool)
CameraPick(cam,GraphicsWidth()/2,GraphicsHeight()/2)

Quote (MishanayCool)
If EntityY#(player)-PickedY#()<2 Then jump=0

Я сначала ступил, и офигел что у меня показывает в IDEal синтаксис команды гравити. И начал тыкать на Ф1, а справка молчала. Потом понял!

Ещё чтоза : между строчками? Что оно делает?

Сообщение отредактировал DarkHunter - Понедельник, 09.05.2011, 16:18
 
MishanayCoolДата: Среда, 11.05.2011, 09:26 | Сообщение # 8
разработчик
Группа: Пользователи
Сообщений: 226
Награды: 11
Репутация: 20
Статус: Offline
Quote (DarkHunter)
Ещё чтоза : между строчками? Что оно делает?

Ты имеешь ввиду двоеточие?
Если да то это аналогично возврату каретки(Переводу строки)

Quote (DarkHunter)
Возникли проблемы с понимаем этих строчек:

CameraPick(cam,GraphicsWidth()/2,GraphicsHeight()/2)
Это пикаю в центр экрана на объект с которым нужно столкнуться
If EntityY#(player)-PickedY#()<2 Then jump=0
А здесь высчитываю расстояние между героем и террэйном и если расстояние меньше двух единиц, тогда обнуляю переменную Jump, чтобы герой мог снова прыгать по нажатию клавиши.
Мне кажется ответ не сильно тебя устроит, похоже тебя интересует принцип работы этих команд CameraPick и PickedY#
Так тут хелп лечи, там всё доходчиво описано.


MiniDemo3D - Blitz3D

Сообщение отредактировал MishanayCool - Среда, 11.05.2011, 09:27
 
Форум мира Blitz3D » Язык Blitz3D » 3D программирование » Гравитация и прыжок!
  • Страница 1 из 1
  • 1
Поиск: