ПроЭктировщик
Регистрация: 14.01.2012
Адрес: Зеленоград
Сообщений: 192
Написано 5 полезных сообщений (для 9 пользователей)
|
Ответ: Отскок мяча
Ура!!! Получилось!!! Код, конечно, плохой, но он работает(движение по координатам и гравитация):

Global player
Global cam
Global pln
Global gun
Global pivo
Global cube
Global v# = 0.5
Global g# = 0.005
Graphics3D 800,600,32,1
SetBuffer BackBuffer()
Const TYPE_PLANE = 1
Const TYPE_SPHERES = 2
Type T_bullets
Field ent
Field old_x#
Field old_y#
Field old_z#
Field xspeed#
Field yspeed#
Field zspeed#
Field m%
End Type
player = CreateSphere()
EntityType player,TYPE_SPHERES
cam = CreateCamera(player)
gun = CreateCylinder()
ScaleEntity gun,0.2,0.5,0.2
EntityColor gun,200,50,50
EntityParent gun,cam
PositionEntity gun,1.2,-0.8,1
TurnEntity gun,90,0,0
pivo = CreatePivot()
EntityParent pivo,gun
PositionEntity pivo,0,1,0
pln = CreatePlane()
PositionEntity pln,0,-2,0
EntityColor pln,50,150,150
EntityType pln,TYPE_PLANE
cube1 = CreateCube()
EntityType cube1,TYPE_PLANE
EntityColor cube1,50,50,200
ScaleEntity cube1,2,2,1
PositionEntity cube1,0,-1,-5
cube2 = CreateCube()
EntityType cube2,TYPE_PLANE
EntityColor cube2,50,50,200
ScaleEntity cube2,2,2,1
PositionEntity cube2,0,-1,5
Collisions TYPE_SPHERES,TYPE_PLANE,2,1
HidePointer()
While Not KeyHit(1)
If MouseHit(1)
CreateBullet()
EndIf
UpdateBullets()
If KeyDown(17) MoveEntity player,0,0,0.1
If KeyDown(31) MoveEntity player,0,0,-0.1
If KeyDown(30) MoveEntity player,-0.1,0,0
If KeyDown(32) MoveEntity player,0.1,0,0
TurnEntity player, 0, 0 -MouseXSpeed() * 0.1, 0
TurnEntity cam, MouseYSpeed() * 0.1, 0, 0
MoveMouse GraphicsWidth() / 2, GraphicsHeight() / 2
RotateEntity cam, EntityPitch#(cam), 0, 0
UpdateWorld()
RenderWorld()
Flip
Wend
End
;---------------------------------------------------;
Function CreateBullet.T_bullets()
ex_bul.T_bullets = New T_bullets
ex_bul\ent = CreateSphere(6,pivo)
ScaleEntity ex_bul\ent,0.2,0.2,0.2
EntityParent ex_bul\ent,0
RotateEntity ex_bul\ent,0,0,0
EntityType ex_bul\ent,TYPE_SPHERES
EntityRadius ex_bul\ent,0.2,0.2
ex_bul\old_x = EntityX(ex_bul\ent)
ex_bul\old_y = EntityY(ex_bul\ent)
ex_bul\old_z = EntityZ(ex_bul\ent)
ex_bul\xspeed = v * Cos(-EntityPitch#(cam)) * Sin(-EntityYaw#(player))
ex_bul\yspeed = v * Sin(-EntityPitch#(cam))
ex_bul\zspeed = v * Cos(-EntityPitch#(cam)) * Cos(EntityYaw#(player))
ex_bul\m = 1
Return ex_bul
End Function
Function UpdateBullets()
Local ex_bul.T_bullets
For ex_bul = Each T_bullets
If ex_bul\m = 1
MoveEntity ex_bul\ent,ex_bul\xspeed,ex_bul\yspeed,ex_bul\zspeed
ex_bul\yspeed = ex_bul\yspeed - g
EndIf
If EntityCollided(ex_bul\ent,TYPE_PLANE)
ex_bul\m = 0
For c% = 1 To CountCollisions(ex_bul\ent)
nx# = CollisionNX(ex_bul\ent,c)
ny# = CollisionNY(ex_bul\ent,c)
nz# = CollisionNZ(ex_bul\ent,c)
If nz <> 0
If ex_bul\zspeed > 0
ex_bul\zspeed = ex_bul\zspeed * nz
Else
ex_bul\zspeed = ex_bul\zspeed * (-nz)
EndIf
EndIf
If nx <> 0
If ex_bul\xspeed > 0
ex_bul\xspeed = ex_bul\xspeed * nx
Else
ex_bul\xspeed = ex_bul\xspeed * (-nx)
EndIf
EndIf
If ny <> 0
If ex_bul\yspeed > 0
ex_bul\yspeed = ex_bul\yspeed * ny
Else
ex_bul\yspeed = ex_bul\yspeed * (-ny)
EndIf
EndIf
ex_bul\m = 1
Next
EndIf
Next
End Function
__________________
Последний раз редактировалось Devilox, 11.11.2012 в 13:50.
Причина: Разобрался :)
|