Показать сообщение отдельно
Старый 02.03.2012, 21:58   #1
Devilox
ПроЭктировщик
 
Аватар для Devilox
 
Регистрация: 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
(Offline)
 
Ответить с цитированием