AnyKey`щик
Регистрация: 23.01.2007
Сообщений: 7
Написано 0 полезных сообщений (для 0 пользователей)
|
Re: Реализация трассера
ненужно пулю делать физическим объектом, просто проверяй коллизию и в случае столкновения с землей либо уничтожай ее, либо направляй в рандомном направлении)) и еще добавь пули строку жизнь и после выстрела с каждым циклом отнимай какоето кол- во
также с рэгдолом пока он еще жив, отнимай у него жизни а когда жизнь <= 0 находи точку столкновения и прикладывай силу(импульс) величиной равной жизни твоей пули

Graphics3D 640,480,16,2
SetBuffer BackBuffer()
Const ENEMYCOL=1,BULLETCOL=2, POL=2
Collisions BULLETCOL,ENEMYCOL,2,1
Collisions BULLETCOL,POL,2,2
Player.TPlayer=NewPlayer()
PLayer\piv = CreatePivot()
PLayer\eye = CreateCamera(PLayer\piv)
TranslateEntity PLayer\eye,0,0.9,0
CameraRange PLayer\eye,.1,200
Player\guns=NewGun(Player,300,1.8,2,-1,1)
ShotTimer.TTimers=NewTimer()
PositionEntity PLayer\Piv,0,3,0
EntityRadius PLayer\Piv,.9
EntityType PLayer\Piv,1
tex=CreateDummyTexture(256,256)
ScaleTexture tex,10,10
ground=CreatePlane() ; or the map mesh etc.
EntityTexture ground,tex
EntityType ground,POl
origin_bullet=CreateSprite2()
temp=CopyMesh(origin_bullet)
RotateMesh temp,0,0,90
AddMesh temp,origin_bullet
FreeEntity temp
ScaleMesh origin_bullet,.05,.05,3
EntityFX origin_bullet,1+16
EntityColor origin_bullet,255,200,0
HideEntity origin_bullet
origin_enemy=CreateCube()
ScaleEntity origin_enemy, 1, 3, 1
EntityType origin_enemy,ENEMY_TYPE
HideEntity origin_enemy
For i=1 To 100
NewEnemy(origin_enemy)
Next
sp#=.1 ; main walking speed (not connected with wobbling)
shoe_size#=7.0 ; stepspeed for wobbling camera (eg. 7=running, 4=walking)
head_bang_X#=0.1 ; amount of wobbling
head_bang_Y#=0.1
Collisions 1,2,2,2
While Not KeyHit(1)
mxs#=MouseXSpeed()/4.0
mys#=MouseYSpeed()/4.0
MoveMouse GraphicsWidth()/2,GraphicsHeight()/2
camxa#=camxa-mxs Mod 360
camya#=camya+mys
If camya<-90 Then camya=-90
If camya>90 Then camya=90
RotateEntity PLayer\Piv,0,camxa,0
RotateEntity PLayer\eye,camya,0,0
If MouseDown(1)
If Player\guns\Nextshot Then
NewShot(origin_bullet,3,Player\guns)
Player\guns\Nextshot=False
End If
Player\guns\Nextshot=TickTimer(ShotTimer,15)
End If
UpdateBullet(Player\guns)
MoveEntity PLayer\eye,0,-.05,0 ; simplified gravity
walking=0
If KeyDown(30) Then: MoveEntity PLayer\Piv,-sp,0,0 : walking=1: EndIf
If KeyDown(32) Then: MoveEntity PLayer\Piv, sp,0,0 : walking=1: EndIf
If KeyDown(17) Then: MoveEntity PLayer\Piv,0,0, sp : walking=1: EndIf
If KeyDown(31) Then: MoveEntity PLayer\Piv,0,0,-sp : walking=1: EndIf
; >>>>>>>>>wobble camera
If walking=1
a1#=(a1#+shoe_size) Mod 360
Else
;a1#=a1#*0.8
EndIf
PositionEntity PLayer\eye,Cos(a1#)*head_bang_X#,Sin(90+a1#*2)*hea d_bang_Y#,0,0
; PositionEntity camera,Cos(a1#)*head_bang_X#,Sin(270+a1#*2)*head_b ang_Y#,0,0 ; or try this one instead!
UpdateWorld
RenderWorld
; >>>>>>>>>control footstep sound
If Sin(90+a1*2)<-.85
If footstep_needed<>0
Color 255,255,255
Text 50,50, "Tap!" ; play a footstep sound here!
footstep_needed=0
EndIf
Else
footstep_needed=1
EndIf
VWait:Flip 0
Wend
End
Function CreateDummyTexture(w,h)
tex=CreateTexture(w,h)
SetBuffer TextureBuffer(tex)
Color 255,255,255
For i=0 To 1000
Color Rand(255),Rand(255),Rand(255)
Line Rand(0,w-1),Rand(0,h-1),Rand(0,w-1),Rand(0,h-1)
Next
SetBuffer BackBuffer()
Return tex
End Function
Type TTimers
Field orig,out
End Type
Function NewTimer.TTimers()
Local time.Ttimers = New Ttimers
Return time
End Function
Function TickTimer(time.TTimers,firerate)
If Not time\out>=(1000/firerate) Then
time\out=MilliSecs()-time\orig
Else
time\orig=MilliSecs()
time\out=0
Return True
End If
Return False
End Function
Type TEnemy
Field entity,life
;.....
End Type
Function NewEnemy(mesh)
newenemy.TEnemy=New TEnemy
newenemy\entity=CopyEntity(mesh)
EntityType newenemy\entity,ENEMYCOL
newenemy\life=255
EntityColor newenemy\entity,255,newenemy\life,newenemy\life
NameEntity newenemy\entity,Handle(newenemy)
PositionEntity newenemy\entity,Rand(-50,50),Rand(50),Rand(-50,50)
End Function
Type TGun
Field range
Field accuracy#
Field mesh
Field nextshot
;.....
End Type
Function NewGun.TGun(player.TPlayer,range,accuracy#,x,y,z)
Gun.TGun=New TGun
gun\range=range
gun\accuracy=accuracy
gun\mesh=CreatePivot(player\eye)
PositionEntity gun\mesh,x,y,z
Return gun
End Function
Type TPlayer
Field piv
Field eye
Field pitch#,yaw#
Field aup,adown
Field Xsens#,Ysens#
Field guns.TGun
Field nextshot
;....
End Type
Function NewPlayer.TPlayer(xsens#=0.5,ysens#=0.5,aup=80,ado wn=-75)
player.TPlayer=New TPlayer
player\eye=CreateCamera()
player\aup=aup
player\adown=adown
player\xsens=xsens
player\ysens=ysens
player\nextshot=True
Return player
End Function
Function CameraCtrl(player.TPlayer)
player\pitch=player\pitch+MYspeed*player\ysens
player\yaw=player\yaw-MXspeed*player\xsens
If player\yaw>359 Then player\yaw=0
If player\yaw<0 Then player\yaw=359
If player\pitch<player\adown Then player\pitch=player\adown
If player\pitch>player\aup Then player\pitch=player\aup
RotateEntity player\eye,player\pitch,player\yaw,0
MoveMouse GHwidth,GHheight
End Function
Type TBullet
Field entity
Field range
Field speed
Field life = 500
End Type
Function NewShot(mesh,speed,gun.TGun)
shot.TBullet=New TBullet
shot\entity=CopyEntity(mesh,gun\mesh)
Entityalpha shot\entity,Rnd(0,1)
EntityType shot\entity,BULLETCOL
EntityParent shot\entity,0
shot\range=gun\range
shot\speed=speed
RotateEntity shot\entity,EntityPitch(shot\entity)+Rnd(-gun\accuracy,gun\accuracy),EntityYaw(shot\entity)+ Rnd(-gun\accuracy,gun\accuracy),0
End Function
Function UpdateBullet(gun.TGun)
Local entity
Local newenemy.TEnemy
For shot.TBullet=Each TBullet
If Not (shot\range<=0) Then
MoveEntity shot\entity,0,0,shot\speed
entity=EntityCollided(shot\entity,POL)
If entity Then
;ScaleMesh shot\entity,.05,.05,.3
RotateEntity shot\entity,Rnd(-90,90),Rnd(-90,90),0
Else
entity=EntityCollided(shot\entity,ENEMYCOL)
If entity Then
newenemy=Object.TEnemy(EntityName(entity))
If Not(newenemy\life)<=0 Then
NewEnemy\life=newenemy\life-Rand(1,30)
EntityColor newenemy\entity,255,newenemy\life,newenemy\life
Else
FreeEntity NewEnemy\entity
Delete newenemy
End If
shot\range=0
Else
shot\range=shot\range-shot\speed
End If
End If
Else
FreeEntity shot\entity
Delete shot
EndIf
Next
End Function
Function CreateSprite2(file$="",flag=1,doubleside=0)
Local mesh=CreateMesh()
Local surf=CreateSurface(mesh)
Local v0=AddVertex (surf,-1,0,2 ,0,1)
Local v1=AddVertex (surf,1,0,2 ,1,1)
Local v2=AddVertex (surf,-1,0,0 ,0,0)
Local v3=AddVertex (surf,1,0,0 ,1,0)
AddTriangle (surf,v0,v1,v3)
AddTriangle (surf,v3,v2,v0)
If file$<>"" Then
Local temp=LoadTexture(file$,flag)
EntityTexture mesh,temp
FreeTexture temp
End If
If doubleside Then EntityFX mesh,16
Return mesh
End Function
|
|