|
3D-программирование Вопросы, касающиеся программирования 3D мира |
09.02.2009, 14:12
|
#1
|
ПроЭктировщик
Регистрация: 26.08.2008
Сообщений: 149
Написано 10 полезных сообщений (для 18 пользователей)
|
Колизия при прыжке
Вот код прыжка где то нашел в семплах. Работает он нормально по крайней мере игрок не будет бегать по стенам но в нем есть проблема, когда подпрыгнуть в углу где стены сходятся игрок застревает, а если отойти назад отцепляется от стены. Вот сам код:
Graphics3D 800,600,32,0
SetBuffer BackBuffer()
Global gravity#=.08,jumpvel#=2
Global mx,my,angx#,angy#,m#,cam,player
Const Player_T=1,Map_T=2
Player=CreatePivot()
EntityRadius player,5,9
EntityType player,player_T
cam= CreateCamera(Player)
tex = CreateTexture(256,256)
tb=TextureBuffer(tex)
For i=0 To 255
Print(255-i)
For j=0 To 255
grey = Rand(0,25)
r_=Rand(100)+grey
g_=Rand(200)+grey*20
b_=Rand(30)+grey*10
WritePixel i,j,(r_ Shl 16) Or (g_ Shl Or b_,tb
Next
Next
box=CreateCube()
ScaleEntity box,50,50,50
EntityTexture box,tex
FlipMesh box
EntityType box,Map_T
Collisions Player_T,Map_T,2,3
Repeat
If KeyDown( 30 )=True Then speedX#=-1
If KeyDown( 32 )=True Then speedX#= 1
If KeyDown( 31 )=True Then speedZ#=-1.5
If KeyDown( 17 )=True speedZ#= 1.5
mx = MouseX()
my = MouseX()
angx#=(-MouseXSpeed()-angx#)/2.4+angx#
angy#=(MouseYSpeed()-angy#)/2.4+angy#
m#=m#+angy#*.07
If m> 90 Then m=90
If m<-90 Then m=-90
MoveMouse GraphicsWidth()*0.5, GraphicsHeight()*0.5
RotateEntity cam,m#,0,0
TurnEntity player,0,angx#*.07,0
If jumping=0
If KeyDown(57) And EntityCollided(player,map_t)>1 Then yvel#=jumpvel# jumping=1
EndIf
If jumping=1
yvel#=yvel#-gravity#
by#=by#+yvel#
EndIf
If by#<1 Then by#=1 yvel#=0 jumping=0
speedX#=speedX#*.6
speedZ#=speedZ#*.6
MoveEntity player,speedX#,yvel#,speedZ#
If jumping=0 Then MoveEntity player,0,-.55,0
UpdateWorld
RenderWorld
If KeyHit(1) End
Flip
Forever
Помогите разобраться !
|
(Offline)
|
|
09.02.2009, 17:14
|
#2
|
AnyKey`щик
Регистрация: 07.02.2009
Сообщений: 14
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Колизия при прыжке
не знаю как это поправить, но этот с помощью этого бага можно вылезти даже до потолка )
попробуй сам написать код прыжка. иногда легче самому сделать, чем поправить чужое
|
(Offline)
|
|
09.02.2009, 18:14
|
#3
|
ПроЭктировщик
Регистрация: 26.08.2008
Сообщений: 149
Написано 10 полезных сообщений (для 18 пользователей)
|
Ответ: Колизия при прыжке
Нет !!! Зачем изобретать велосипед. В коде прыжка все нормально это колизия кривая вот и прошу помощи чтобы устранить этот баг.
|
(Offline)
|
|
09.02.2009, 18:26
|
#4
|
Разработчик
Регистрация: 02.04.2007
Сообщений: 353
Написано 54 полезных сообщений (для 289 пользователей)
|
Ответ: Колизия при прыжке
Сори если обижу - но позже если пойдешь по пути прогинга скажешь что праильно сказал )
ЭТ У ТЯ БАШКА КРИВАЯ )))))))))))))))
Напиши заново!!!!!
|
(Offline)
|
|
09.02.2009, 18:39
|
#5
|
злобный флудер
Регистрация: 10.07.2007
Сообщений: 2,585
Написано 789 полезных сообщений (для 1,476 пользователей)
|
Re: Колизия при прыжке
|
(Offline)
|
|
09.02.2009, 18:41
|
#6
|
Дэвелопер
Регистрация: 17.01.2007
Сообщений: 1,552
Написано 351 полезных сообщений (для 774 пользователей)
|
Ответ: Колизия при прыжке
код фиговый, чтобы игрок не лазил по потолкам и стенкам или не отталкивался от них, то нужно проверять наклон поверхности. Для этого есть команды CollisionNX/NY/NZ, вот через них и сравнивай. Если значение стоит в определенных пределах, то разрешай игроку прыгать, если не стоит то запрещай.
|
(Offline)
|
|
10.02.2009, 12:56
|
#7
|
ПроЭктировщик
Регистрация: 26.08.2008
Сообщений: 149
Написано 10 полезных сообщений (для 18 пользователей)
|
Ответ: Колизия при прыжке
Я уже все перепробовал с CollisionNY и у меня постоянно ошибку выдает Collision index out of range почему это так?
|
(Offline)
|
|
10.02.2009, 13:13
|
#8
|
Знающий
Регистрация: 12.07.2007
Сообщений: 297
Написано 50 полезных сообщений (для 133 пользователей)
|
Ответ: Колизия при прыжке
Можно стенам и полу назначить разные EntityType, что лучше в д. случае.
А в этом примере можно добавить
If jumping=0 yvel#=yvel#-gravity#/2 или 3,4 итд подобрать короче
чтоб хотя бы сползал со стен )) , а на потолке вообще не будтет зависать скорее всего.
|
(Offline)
|
|
10.02.2009, 16:25
|
#9
|
Дэвелопер
Регистрация: 17.01.2007
Сообщений: 1,552
Написано 351 полезных сообщений (для 774 пользователей)
|
Ответ: Колизия при прыжке
Сообщение от Petrofan
Я уже все перепробовал с CollisionNY и у меня постоянно ошибку выдает Collision index out of range почему это так?
|
видимо ты неправильно задаешь второй параметр в CollisionNY. Надо так:
count = CountCollisions(player)
For n = 1 to count
nx# = nx# + CollisionNX(player, n)
ny# = ny# + CollisionNY(player, n)
nz# = nz# + CollisionNZ(player, n)
Next
nx = nx / count
ny = ny / count
nz = nz / count
Еще можно проверять с какой частью сферы(игрока) ты столкнулся и давать возможность прыгать или перемещатся только если эта часть находится в нижней половине, например так:
count = CountCollisions(player)
Local jumpMode = False
For n = 1 to count
y# = CollisionY(player, n) - EntityY(player,1)
If y# < -0.0 then jumpMode = True : Exit
Next
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
27.01.2010, 12:25
|
#10
|
ПроЭктировщик
Регистрация: 11.11.2009
Сообщений: 172
Написано 17 полезных сообщений (для 34 пользователей)
|
Ответ: Колизия при прыжке
простите меня что малясь не в тему)
Вопрос: работает ли колизия с моделями *.md2, а то я вроде всё правильно делаю, а все равно проникает...Помогите
|
(Offline)
|
|
27.01.2010, 12:39
|
#11
|
Мастер
Регистрация: 27.01.2008
Адрес: Россия, СКФО, ЧР, Грозный
Сообщений: 1,144
Написано 578 полезных сообщений (для 2,207 пользователей)
|
Ответ: Колизия при прыжке
Код пожалуйста, мы ведь не экстрасенсы
|
(Offline)
|
|
27.01.2010, 12:54
|
#12
|
ПроЭктировщик
Регистрация: 11.11.2009
Сообщений: 172
Написано 17 полезных сообщений (для 34 пользователей)
|
Ответ: Колизия при прыжке
ах да, забыл(
Graphics3D 0,0,32,1
SetBuffer BackBuffer()
Global Player=CreateSphere()
Global CamPlayer=CreateCamera(Player)
PositionEntity Player,50,60,60
EntityRadius player,8,25
EntityType player, TypePlayer
Global L2L1=LoadMD2("Media\Models\L2L1\L2L1.md2")
L2L1T=LoadTexture("Media\Models\L2L1\L2L1T.jpg")
EntityTexture L2L1,L2L1T
PositionEntity L2L1,74,-12,547
ScaleEntity L2L1,0.5,0.5,0.5
RotateEntity L2L1,0,-90,0
EntityType L2L1, TypeWall
Collisions TypePlayer, TypeWall, 2,3
While Not KeyHit(1)
RenderWorld
UpdateWorld
Flip
Wend
End
|
(Offline)
|
|
27.01.2010, 20:30
|
#13
|
Мастер
Регистрация: 27.01.2008
Адрес: Россия, СКФО, ЧР, Грозный
Сообщений: 1,144
Написано 578 полезных сообщений (для 2,207 пользователей)
|
Ответ: Колизия при прыжке
Ты забыл типы объявить. Пропиши перед глобалами
Const TypePlayer=1, TypeWall=2
|
(Offline)
|
|
27.01.2010, 20:59
|
#14
|
ПроЭктировщик
Регистрация: 11.11.2009
Сообщений: 172
Написано 17 полезных сообщений (для 34 пользователей)
|
Ответ: Колизия при прыжке
***** , я просто нечаяно забыл написать( колизия с другими объктами рабоатет, а имено c *.csm
|
(Offline)
|
|
27.01.2010, 23:07
|
#15
|
Мастер
Регистрация: 27.01.2008
Адрес: Россия, СКФО, ЧР, Грозный
Сообщений: 1,144
Написано 578 полезных сообщений (для 2,207 пользователей)
|
Ответ: Колизия при прыжке
Будь внимательнее, ты в таком коротком коде ошибся, когда будешь писать огромные проекты, невнимательность будет для тебя страшным врагом.
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 11:10.
|