Collisions In Functions

Blitz3D Forums/Blitz3D Programming/Collisions In Functions

Can anyone please tell if you are able to allow collisions within a function, i don't know how.
I have the game levels as seperate functions in order to make the code more readable and easier to navigate through, but my collision routines just don't seem to be working. :-(

Thanks for any help


IcE

Anyone?

IcE

Collisions routines? Collisions in functions? Once collisions are set up blitz handles everything internaly. What are yopu trying to do/what are you doing now? A code example would be very helpful, thanks.

Heres the code. It's not quite in functions at the moment but for some reason, the collision routines not working even though it isn't in a function. Can you tell me where i'm going wrong please?

The code:

;-------------------
;Graphics setup
;-------------------
SetBuffer BackBuffer()
Graphics3D 800,600
;---------
;Variables
;---------
Global player_speed#=10
Global stage=0
Global thickness=0.9
location$="blues room"
Global cam=CreateCamera()
CameraRange cam,1,10000
;---------
;Collision
;---------
pl=1
ro=2
;-----------------
;Initialise player
;-----------------
player_texture=LoadTexture("gfx/textures/blue_tex.bmp")
lightmap=LoadTexture("gfx/textures/lightmap.bmp",64)
Global player=LoadAnimMesh("gfx/models/blue.3ds")
Global player_cell=LoadAnimMesh("gfx/models/blue.3ds",player)
head=FindChild(player,"head")
EntityTexture head,player_texture
body=FindChild(player,"body")
EntityTexture body,player_texture
left_arm=FindChild(player,"larm")
EntityTexture left_arm,player_texture
right_arm=FindChild(player,"rarm")
EntityTexture right_arm,player_texture
left_foot=FindChild(player,"lfoot")
EntityTexture left_foot,player_texture
right_foot=FindChild(player,"rfoot")
EntityTexture right_foot,player_texture
cellshade(player_cell)
EntityTexture player,lightmap
EntityType player,pl,True
ScaleEntity player,.3,.3,.3
EntityRadius player,23


;blues_room()
;---------
;Variables
;---------
exists=1
;--------------
;Loading screen
;--------------
load_screen=LoadImage("gfx/loading.bmp")
DrawImage load_screen,0,0
Flip
;------------------
;Initialise objects
;------------------
blue_room=LoadAnimMesh("gfx/models/blue_room.3ds")
blue_room_cell=LoadAnimMesh("gfx/models/blue_room.3ds",blue_room)
cellshade(blue_room_cell)
EntityType blue_room,ro,True
cam_position=FindChild(blue_room,"campos")
point=FindChild(blue_room,"bluestart")

AmbientLight 255,255,255
;----------------
;Position objects
;----------------
PositionEntity blue_room,0,0,0
EntityParent cam,cam_position,False
;----------
;Collisions
;----------
Collisions pl,ro,2,3
;----
;Loop
;----
While exists=1

PointEntity cam,player
player_control()
If KeyDown(1) Then exists=0
RenderWorld

Flip

Wend

FreeImage load_screen
FreeEntity blue_room
End




Thanks for your kind help :-)


IcE

Any help would be really appriciated. Please if anyone can tell me where i'm going wrong, i can't really progress any further until I have got it sorted out.


Thankyou
:-)


IcE

Uh-hum!, you see, you checked for collisions before your loop even began. The correct method is to check for collisions each loop. Soooo...

Change this:

;---------- 
;Collisions 
;---------- 
Collisions pl,ro,2,3 
;---- 
;Loop 
;---- 
While exists=1 

PointEntity cam,player 
player_control() 
If KeyDown(1) Then exists=0 
RenderWorld 

Flip 

Wend 

FreeImage load_screen 
FreeEntity blue_room 
End 


to something along this line:

;---- 
;Loop 
;---- 
While exists=1 

PointEntity cam,player 
player_control() 
If KeyDown(1) Then exists=0 
;---------- 
;Collisions 
;---------- 
Collisions pl,ro,2,3 

UpdateWorld
RenderWorld
Flip 

;CountCollisions
;ClearCollisions

Wend 

FreeImage load_screen 
FreeEntity blue_room 
End 



(I believe you have to call collisions before updateworld (I'm at work right now and my memory stinks) and then countcollisions or clearcollisions if necessary)

Thanks WolRon, i'll give it a try and see how it goes.
I really appriciate your help.

:-)

Hmmm, no joy :-(. Ah well, thanks for the help all the same :-)
If there are any more solutions to this please keep me updated.
Many thanks

:-)

Wait!!! i got it. Thankyou ever so much!!!!
It was only the "Updateworld" command i was missing ;-).
Thankyou for reminding about it,lol.

Thanks again

:-)