Показать сообщение отдельно
Старый 09.02.2009, 14:12   #1
Petrofan
ПроЭктировщик
 
Аватар для Petrofan
 
Регистрация: 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)
 
Ответить с цитированием