Разработчик
Регистрация: 08.03.2007
Сообщений: 530
Написано 31 полезных сообщений (для 36 пользователей)
|
Ответ: Xors3D
Вот небольшой баг, который сложно им считать, но всеже уязвимость колизии на лицо. Сфера ,падающая вниз, проскакивает через куб.
Попробовал обойти его, к удивлению больше наткнутся на подобное не смог

; Xors3D header file
Include "C:\Programs\Blitz3D\userlibs\xors3d.bb"
xGraphics3D 800,600,32,0
xSetBuffer xBackBuffer()
pxCreateWorld(0, "сможешь угадать?)))")
pxSetGravity(0, -10, 0)
;;;Creat
camera=xCreateCamera ()
xPositionEntity (camera,0,5,-20)
xRotateEntity camera,0,0,0
light=xCreateLight()
xRotateEntity light,90,0,0
plane=xCreateCube()
;ground_tex=xLoadTexture("terrain1.jpg")
;xScaleTexture (ground_tex,0.05,0.05)
xPositionEntity (plane,0,-1,0)
xEntityTexture plane,ground_tex
xEntityType plane,1
xScaleEntity(plane,500,0.1,500)
Cube1=xCreateCube()
xPositionEntity(Cube1,10,5,0)
xScaleEntity(Cube1,5,5,5)
xEntityType(Cube1,1)
Cube=xCreatesphere()
xPositionEntity(Cube,20,45,0)
xScaleEntity(Cube,5,5,5)
xEntityRadius (Cube,5)
xEntityType(Cube,2)
Global jump,chislo1,inval,Kdown,V#=0.1
CreateUser(0,camera,0,8,-110,0)
xCollisions(2,1,2,2)
;_____________________________________________________________________________________________________
While Not xKeyHit(1)
If xEntityCollided(Cube,1)
x=xCollisionX(Cube,0)
;Stop
Else
xMoveEntity(Cube,0,-0.01,0)
EndIf
pxRenderPhysic(140,1)
mys#=xMouseYSpeed()
mxs#=xMouseXSpeed()
;IntervalKey()
Gravitate()
Update_user(camera,mxs,mys)
xUpdateWorld()
xRenderWorld
xText 10,10, "chislo1="+chislo1
xText 10,20, "XSurface="+XSurface
xText 10,30, "Xset="+set
xFlip
Wend
;-----------------------------------------------------------------------------------------------------
End
Type User
Field Model,camera
Field Body,Body2,mash
Field Pivot,Pivot2
Field Shift#
End Type
Type GravEnt
Field a#
Field v#
Field GravEntity,GravEntity2
End Type
Function Update_user(camera,mxs#,mys#)
For Us.User = Each User
If mys>30 Then mys=30
If mys<-30 Then mys=-30
If mxs>30 Then mxs=30
If mxs<-30 Then mxs=-30
xTurnEntity camera,mys/5,0,0
xTurnEntity Us\Pivot,0,-mxs/5,0,1
If xKeyDown(32)=True Then xMoveEntity Us\Pivot,V,0,0
If xKeyDown(30)=True Then xMoveEntity Us\Pivot,-V,0,0
If xKeyDown(31)=True Then xMoveEntity Us\Pivot,0,0,-V
If xKeyDown(17)=True Then xMoveEntity Us\Pivot,0,0,V
If xKeyDown(42)=True
V=V+0.0002
Else
V=V-0.0001
EndIf
If V>0.1 V=0.1
If V<0.03 V=0.03
Next
u#=80
xMoveMouse xGraphicsWidth()*0.5,xGraphicsHeight()*0.5
xHidePointer
If Abs(xEntityPitch#(camera))>u# xRotateEntity camera,(u#)*Sgn(xEntityPitch#(camera)),xEntityYaw(camera),0
End Function
Function CreateUser(ent,camera, pos_x, pos_y, pos_z,h#)
Us.User = New User
Us\Pivot=xCreateSphere(5)
Us\Pivot2=xCreateSphere(5)
If ent>0
Us\Model=ent
Else
Us\Model=xCreateCube()
EndIf
NewGravEnt(Us\Pivot)
Us\camera=camera
xPositionEntity Us\Model, pos_x,pos_y-h,pos_z
xPositionEntity Us\Pivot, pos_x,pos_y,pos_z
xPositionEntity Us\camera, pos_x,pos_y+h+6,pos_z
xEntityParent(Us\Model,Us\Pivot)
xEntityParent(Us\camera,Us\Pivot)
;Us\mash = xCreateCube()
;xScaleEntity(Us\mash,0.05,0.05,0.05)
End Function
Function NewGravEnt(entity)
grv.GravEnt= New GravEnt
grv\GravEntity=entity
xScaleEntity(grv\GravEntity,2,2,2)
xEntityType grv\GravEntity,2
xEntityRadius(grv\GravEntity,2)
;xHideEntity(entity)
End Function
Function Gravitate()
For grv.GravEnt= Each GravEnt
If Not xEntityCollided (grv\GravEntity,1)
grv\a=grv\a-0.0001
grv\v=grv\v+grv\a/200
If grv\v>0.1 grv\v=0.1
Else
xLinePick(xEntityX(grv\GravEntity),xEntityY(grv\GravEntity),xEntityZ(grv\GravEntity),0,-2,0)
If xPickedEntity()<>0
grv\a=0
grv\v=0
Else
grv\a=grv\a-0.0001
grv\v=grv\v+grv\a/200
If grv\v>0.1 grv\v=0.1
EndIf
If xKeyHit (57)
grv\v=0.02
grv\a=0.01
EndIf
EndIf
xMoveEntity grv\GravEntity,0,grv\v,0
;If xEntityCollided(grv\GravEntity,1) x=xCollisionX(grv\GravEntity,CountCollisions (grv\GravEntity)-1)
Next
End Function
Последний раз редактировалось CRASHER, 17.10.2009 в 20:11.
|