Тема: Xors3D
Показать сообщение отдельно
Старый 16.10.2009, 07:15   #261
CRASHER
Разработчик
 
Регистрация: 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.
(Offline)
 
Ответить с цитированием