I am sure this is really simple but I have not got it.
I have the code
Function Block_distroy()
For z.map = Each map
For x.Bullet = Each Bullet
If EntityCollided(x\mesh,z\mesh)
DebugLog"Collieded"
FreeEntity x\Mesh
FreeEntity z\Mesh
Delete z
Delete x
EndIf
Next
Next
End Function
The idea of this funcion is that ir detects a collison between the bullet and a boc created by the creat box command.
I always thought you used the paramters of enititycolided were the two things which were have collisions checked between, but appears not, I don't know if any one will get what I am going on about but oh well have a look please.
Agamer
global mesh1,mesh2
entitytype mesh1,1
entitytype mesh2,2
collisions 1,2,2,1
Function Block_distroy()
For z.map = Each map
For x.Bullet = Each Bullet
If EntityCollided(z\mesh2,2)=x\mesh1 then
FreeEntity x\Mesh1
FreeEntity z\Mesh2
Delete z
Delete x
EndIf
Next
Next
End Function
think thats how i did it last time
This is a simple problem that can be solved. Many people make this mistake, including myself.
Look at this line:
If EntityCollided(x\mesh, z\mesh)
If you have collision types assigned to your meshes with "EntityType," you must put the collision TYPE for "z\mesh" instead of the actual mesh.
Const XMESH_TYPE = 1
Const ZMESH_TYPE = 2
For i.map = Each map
EntityType i\mesh, ZMESH_TYPE
Next
For o.Bullet = Each Bullet
EntityType o\mesh, XMESH_TYPE
Next
Then you would replace this line:
If EntityCollided(x\mesh, z\mesh)
WITH
If EntityCollided(x\mesh, ZMESH_TYPE) ;ZMESH_TYPE could also be "2"
Darn it! You beat me to it!
about time i got something right :)
well i hope anyways
I still can't seemt o get it.
The code for generating the blocks is as follows
Function Create_map();Generates the 3d visible map
For x=0 To 10
For y=0 To 10
If map(x,y)=2
a.Map = New map
a\Mesh =CreateCube ()
EntityType a\mesh,Col_Scnery
PositionEntity a\mesh,x,0,y
ScaleEntity a\mesh,0.5,1,0.5
a\Make = Map(x,y)
EndIf
Next
Next
End Function
and the code once again but modified for delting the blocks as follows.
Function Block_distroy()
For x.bullet = Each Bullet
If EntityCollided(x\mesh,Col_Scnery)
DebugLog"Collieded"
FreeEntity x\Mesh
Delete x
EndIf
Next
End Function
and the part to declare the collision types are
Const Col_Scnery=2
post up all your code and i will have a look dont worry about textures or meshes can mocup with spheres
ok, I will do in a second, I am sure I am missing something really simple!
;Setup
Graphics3D 800,600,32,2
SeedRnd(MilliSecs())
SetBuffer BackBuffer()
;types
Type Map
Field Mesh
Field Make
End Type
Type Bullet
Field Mesh
Field Age
End Type
;arrays
Dim Map(10,10)
;Variables
Global Quit=False
Global cam
Const Bullet_Life=100
Const Bullet_speed#=0.4
Global Balls=1000
;collions
Const Col_Player=1
Const Col_Scnery=2
Const Col_Blocks=3
Collisions Col_Player,Col_Scnery,2,2
;main Game
;PLayer loading
Global Player=LoadMesh("ball.3ds")
ScaleMesh Player,0.3,0.3,0.3
EntityType Player,Col_player
EntityRadius Player,0.4
;Main camrea
Cam=CreateCamera(Player);this is the main view camrea
TranslateEntity Cam,0,1,-3
PointEntity Cam,PLayer
;Light
light=CreateLight();Creates a light
;INfinte plane
plane=CreatePlane();Makes a simple infinte plane
grass_tex=LoadTexture( "media/metal.png" );loads planes texture
EntityTexture plane,grass_tex;set planes texture
PositionEntity plane,0,-1,0;positions the plane
EntityType Plane,Col_scnery
;EntityAlpha plane,0.9
;mirror=CreateMirror()
;Map camrea
cam2=CreateCamera(cam);Creates the map camrea
TranslateEntity cam2,0,5,0
PointEntity cam2,plane
CameraViewport cam2,0,500,100,100;positions the map
;create the random map
Generate_map()
create_map()
;Physics()
Repeat;Main loop
Movement
Shoot
Update_Bullets
Block_distroy()
UpdateWorld
RenderWorld
GUI
Flip
Finish
Until Quit=True
;end of main loop
;Functions
Function Finish();Detects if the game has finished
If KeyHit(1)
Quit=True
EndIf
End Function
Function Generate_map();Generates the 2d map cordanites
For x=0 To 10
For y=0 To 10
Map(x,y)=Rnd(1,10)
DebugLog map(x,y)
Next
Next
End Function
Function Create_map();Generates the 3d visible map
For x=0 To 10
For y=0 To 10
If map(x,y)=2
a.Map = New map
a\Mesh =CreateCube ()
EntityType a\mesh,Col_Scnery
PositionEntity a\mesh,x,0,y
ScaleEntity a\mesh,0.5,1,0.5
a\Make = Map(x,y)
EndIf
Next
Next
End Function
Function Movement();Controls the players movement
If KeyDown( 205 )=True Then TurnEntity Player,0,-1,0
If KeyDown( 203 )=True Then TurnEntity Player,0,1,0
If KeyDown( 208 )=True Then MoveEntity Player,0,0,-0.05
If KeyDown( 200 )=True Then MoveEntity Player,0,0,0.05
End Function
Function Shoot()
If KeyHit(57)
If Balls > 0
b.Bullet = New bullet
b\Mesh = CreateSphere()
ScaleEntity b\mesh,0.1,0.1,0.1
PositionEntity b\mesh,EntityX(Player),0,EntityZ(player)
RotateEntity b\mesh,0,EntityYaw(Player),0
b\Age=1
Balls=Balls-1
Else
EndIf
EndIf
End Function
Function Update_Bullets()
For all.Bullet = Each Bullet
MoveEntity all\mesh,0,0,Bullet_speed#
all\Age =all\Age + 1
If all\Age >= Bullet_Life
FreeEntity all\Mesh
Delete all
EndIf
Next
End Function
Function GUI()
Color 225,225,225
Text 0,0,Balls
End Function
Function Block_distroy()
For z.Map = Each Map
For x.bullet = Each Bullet
If EntityCollided(x\mesh,Col_Scnery)
DebugLog"Collieded"
FreeEntity x\Mesh
Delete x
EndIf
Next
Next
End Function
;Setup
Graphics3D 800,600,32,2
SeedRnd(MilliSecs())
SetBuffer BackBuffer()
;types
Type Map
Field Mesh
Field Make
End Type
Type Bullet
Field Mesh
Field Age
End Type
;arrays
Dim Map(10,10)
;Variables
Global Quit=False
Global cam
Const Bullet_Life=100
Const Bullet_speed#=0.4
Global Balls=1000
Global Temp
;collions
Const Col_Player=1
Const Col_Scnery=2
Const Col_Blocks=3
Const Col_bullet=4
Collisions Col_Player,Col_Scnery,2,2
Collisions Col_bullet,Col_Scnery,2,2
;main Game
;PLayer loading
Global Player=LoadMesh("ball.3ds")
ScaleMesh Player,0.3,0.3,0.3
EntityType Player,Col_player
EntityRadius Player,0.4
;Main camrea
Cam=CreateCamera(Player);this is the main view camrea
TranslateEntity Cam,0,1,-3
PointEntity Cam,PLayer
;Light
light=CreateLight();Creates a light
;INfinte plane
plane=CreatePlane();Makes a simple infinte plane
grass_tex=LoadTexture( "media/metal.png" );loads planes texture
EntityTexture plane,grass_tex;set planes texture
PositionEntity plane,0,-1,0;positions the plane
EntityType Plane,Col_scnery
;EntityAlpha plane,0.9
;mirror=CreateMirror()
;Map camrea
cam2=CreateCamera(cam);Creates the map camrea
TranslateEntity cam2,0,5,0
PointEntity cam2,plane
CameraViewport cam2,0,500,100,100;positions the map
;create the random map
Generate_map()
create_map()
;Physics()
Repeat;Main loop
Movement
Shoot
Update_Bullets
Block_Checker()
UpdateWorld
RenderWorld
GUI
Flip
Finish
Until Quit=True
;end of main loop
;Functions
Function Finish();Detects if the game has finished
If KeyHit(1)
Quit=True
EndIf
End Function
Function Generate_map();Generates the 2d map cordanites
For x=0 To 10
For y=0 To 10
Map(x,y)=Rnd(1,10)
DebugLog map(x,y)
Next
Next
End Function
Function Create_map();Generates the 3d visible map
For x=0 To 10
For y=0 To 10
If map(x,y)=2
a.Map = New map
a\Mesh =CreateCube ()
EntityType a\mesh,Col_Scnery
PositionEntity a\mesh,x,0,y
ScaleEntity a\mesh,0.5,1,0.5
a\Make = Map(x,y)
EndIf
Next
Next
End Function
Function Movement();Controls the players movement
If KeyDown( 205 )=True Then TurnEntity Player,0,-1,0
If KeyDown( 203 )=True Then TurnEntity Player,0,1,0
If KeyDown( 208 )=True Then MoveEntity Player,0,0,-0.05
If KeyDown( 200 )=True Then MoveEntity Player,0,0,0.05
End Function
Function Shoot()
If KeyHit(57)
If Balls > 0
b.Bullet = New bullet
b\Mesh = CreateSphere()
EntityType b\mesh,Col_bullet
ScaleMesh b\mesh,0.1,0.1,0.1
PositionEntity b\mesh,EntityX(Player),0,EntityZ(player)
RotateEntity b\mesh,0,EntityYaw(Player),0
b\Age=1
Balls=Balls-1
Else
EndIf
EndIf
End Function
Function Update_Bullets()
For all.Bullet = Each Bullet
MoveEntity all\mesh,0,0,Bullet_speed#
all\Age =all\Age + 1
If all\Age >= Bullet_Life
FreeEntity all\Mesh
Delete all
EndIf
Next
End Function
Function GUI()
Color 225,225,225
Text 0,0,Balls
End Function
Function Block_Checker()
temp=0
For a.bullet=Each bullet
temp=EntityCollided(a\mesh,Col_Scnery)
If temp>0 Then Block_destroy(Temp)
If temp>0 Then FreeEntity a\mesh:Delete a:temp=0
Next
End Function
Function Block_destroy(temp)
For b.map=Each map
If b\mesh=temp Then FreeEntity b\mesh:Delete b
Next
End Function
try this out got it working is destroying the blocks
Thanks for that, I sort of understand what you have done, so thanks, I can now continue on making my game!