ПроЭктировщик
Регистрация: 14.01.2012
Адрес: Зеленоград
Сообщений: 192
Написано 5 полезных сообщений (для 9 пользователей)
|
Упорядоченное исчезновение объектов
У меня проблема: мне нужно, чтобы при выстреле в блок он изчезал, я создал тип, и всё как бы работает, но если я сделаю выстрел в один из блоков, то ещё уничтожить можно будет только блоки с порядковым номером меньше первого исчезнувшего, т.е. у меня 8 блоков:01234567, если я стреляю в 4, он исчезает и ещё можно уничтожить 012 и 3, а 567 - нельзя...Как этого избежать?
Вот код:

Graphics3D 640,480,16,1
SetBuffer BackBuffer()
pl_j = 0
fall=1
gravity# = 0.09
yspeed#=0
jspeed = 1.40
health=100
Global Tplayer = 1, Tblock = 2, TYPE_BULLET = 3
Global cam
Type Bullet
Field rot#,sprite,time_out
End Type
Type blocks
Field ent
End Type
;----------TEXTURES----------;
pln=CreatePlane()
PositionEntity pln,0,-10,0
EntityType pln,Tblock
EntityColor pln,50,100,150
block=CreateCube()
PositionEntity block,0,1000,0
EntityType block,Tblock
EntityColor block,255,0,0
ScaleEntity block,5,4,5
HideEntity block
Global bull_sprite=LoadSprite("bluspark.bmp")
ScaleSprite bull_sprite,3,3
EntityRadius bull_sprite,1.5
EntityType bull_sprite,TYPE_BULLET
HideEntity bull_sprite
laser=LoadSound("laser.ogg")
;map=LoadMesh("levels\level1\level.b3d")
;lightmap=LoadTexture("levels\level1\lightmap.tga")
;TextureCoords lightmap,1
;TextureBlend(lightmap,5)
;EntityTexture map,lightmap,0,1
;FreeTexture lightmap
;PositionEntity map,0,-100,0
;ScaleEntity map,0.3,0.3,0.3
;EntityType map, Tblock
;----------END TEXTURES----------;
;----------MAIN----------;
Global player=CreateSphere()
EntityColor player,255,0,0
PositionEntity player,0,0,0
EntityRadius player,5
EntityRadius player,4
EntityType player, Tplayer
EntityAlpha player,0
cam=CreateCamera(player)
PositionEntity cam,0,3,-2
EntityType cam, Tplayer
gun=LoadMesh("models\level1\gun.3ds")
ScaleEntity gun,0.03,0.03,0.03
EntityParent gun,cam
PositionEntity gun,-1,-4,0
RotateEntity gun,0,-90,0
pivo=CreateSphere()
PositionEntity pivo,-1,1.5,3
EntityParent pivo,gun
EntityAlpha pivo,0
;----------END MAIN----------;
Collisions Tplayer, Tblock, 2, 3
Collisions TYPE_BULLET, Tblock, 2, 2
Dim AllBlocks.blocks(8)
For i=0 To 7
AllBlocks(i) = New blocks
AllBlocks(i)\ent = CopyEntity(block)
Next
PositionEntity AllBlocks(0)\ent,0,-6,5
PositionEntity AllBlocks(1)\ent,0,-2,-15
PositionEntity AllBlocks(2)\ent,0,2,-35
PositionEntity AllBlocks(3)\ent,0,6,-55
PositionEntity AllBlocks(4)\ent,20,10,-55
PositionEntity AllBlocks(5)\ent,40,14,-55
PositionEntity AllBlocks(6)\ent,60,18,-55
PositionEntity AllBlocks(7)\ent,60,22,-35
While Not KeyHit(1)
For i=0 To 7
Local hide% = EntityCollided(AllBlocks(i)\ent, TYPE_BULLET)
If hide<>0
HideEntity AllBlocks(i)\ent
Exit
EndIf
Next
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
x#=EntityX(player)
y#=EntityY(player)
z#=EntityZ(player)
pitch#=EntityPitch(cam)
yaw#=EntityYaw(player)
roll#=EntityRoll(player)
If MouseHit(1)
CreateBullet(pivo)
PlaySound laser
EndIf
If KeyDown(17) MoveEntity player,0,0,0.5
If KeyDown(31) MoveEntity player,0,0,-0.5
If KeyDown(30) MoveEntity player,-0.5,0,0
If KeyDown(32) MoveEntity player,0.5,0,0
For b.Bullet=Each Bullet
UpdateBullet( b )
Next
HidePointer
UpdateWorld
RenderWorld
;----------GRAVITY----------;
yspeed=yspeed-gravity
TranslateEntity player,0,yspeed,0
;-----END-----;
coll = EntityCollided(player,Tblock)
If coll
collide_y = CollisionNY(player,CountCollisions(player) )
If 0<collide_y
If yspeed<-3
health=health+yspeed*3
EndIf
yspeed=0
jump=1
Else
jump=0
EndIf
Else
jump=0
EndIf
;-----JUMP-----;
If jump=1
If KeyDown(57)
yspeed = jspeed
EndIf
EndIf
;----------END JUMP----------;
Text 40, 450,Str(health)
Text 450,450,Str(yspeed)
Text 300,300,Str(x)
Text 350,300,Str(y)
Text 400,300,Str(z)
Text 300,350,Str(pitch)
Text 350,350,Str(yaw)
Text 400,350,Str(roll)
Flip
Wend
End
;------------------------------
Function CreateBullet.Bullet(pivo)
b.Bullet=New Bullet
b\time_out=150
b\sprite=CopyEntity( bull_sprite, pivo)
pitch#=EntityPitch(pivo)
RotateEntity b\sprite,pitch,0,0
EntityParent b\sprite,0
Return b
End Function
;-----------------------------------------------------------
Function UpdateBullet( b.Bullet )
b\time_out=b\time_out-1
If (b\time_out=0) Or EntityCollided( b\sprite,Tblock )
FreeEntity b\sprite
Delete b
Return
EndIf
b\rot=b\rot+30
RotateSprite b\sprite,b\rot
MoveEntity b\sprite,0,0,5
End Function
|