Гравитация и прыжок!
| |
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 были проблемы, поэтому пошёл другим путём
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 |
|
| |
|