Collisions for mazze by toggy2nd Oct 2004 19:30
|
---|
Summary Example for collisions. Description Code ` This code was downloaded from The Game Creators ` It is reproduced here with full permission ` http://www.thegamecreators.com Rem * Title : Sliding Collision Rem * Author : DBS-LB Rem * Date : June 2001 rem ========================================== rem DARK BASIC EXAMPLE PROGRAM 25 rem ========================================== rem This program shows use of object sliding rem collision and simple gravity influences rem ------------------------------------------ rem this is modificated Lee Bamber`s example rem from Toggy autocam off : sync rate 60 hide mouse : sync on `use some brick texture `unrem this to load brick texture rem load image "Cottag02.bmp",2 rem Make a floor and create texture for it make object box 5,1000,10,1000 : position object 5,300,-5,450 : rem color object 5,rgb(0,255,0) create bitmap 1,32,32 : cls rgb(0,155,0) : ink rgb(0,145,0),0 : box 4,4,12,12 get image 1,0,0,32,32 : delete bitmap 1 : texture object 5,1 scale object texture 5,200,200 rem Make a pedestal steps b=6 for x=0 to 700 step 100 for z=0 to 700 step 100 make object box b,50,50,50 position object b,x,0,z `using brick texture from db `unrem this to use texture rem texture object b,2 b=b+1 rem color object 6+t,rgb(90,160,160) next z next x set mipmap mode 2 rem Make a player object (and a non-rotated collision box for it) make object cylinder 1210,10 position object 1210,0,0,0 color object 1210,rgb(20,100,255) make object collision box 1210,-5,-5,-5,5,5,5,0 rem disable object zdepth 1210 rem Make the pedastal use non-rotated box collision for t=6 to 69 make object collision box t,-25,-25,-25,25,25,25,0 next t rem Make the wall and floor objects into static objects (for auto-camera collision) for t=5 to 5 make static object t objx#=object position x(t) objy#=object position y(t) objz#=object position z(t) objsx#=object size x(t)/2.0 objsy#=object size y(t)/2.0 objsz#=object size z(t)/2.0 make static collision box objx#-objsx#,objy#-objsy#,objz#-objsz#,objx#+objsx#,objy#+objsy#,objz#+objsz# delete object t next t rem Make sky black color backdrop 0 rem Start off player gravity playergrav#=2.0 rem Main loop do rem User prompts ink rgb(255,255,0),0 center text 320,2,"Greetings from Toggy" center text 320,20,"USE ARROWS TO MOVE AND SPACE TO JUMP" set cursor 0,0 print screen fps() rem Store old positions oldposx#=object position x(1210) oldposy#=object position y(1210) oldposz#=object position z(1210) rem Control player object if upkey()=1 then move object 1210,2 if downkey()=1 then move object 1210,-2 if leftkey()=1 then yrotate object 1210,wrapvalue(object angle y(1210)-3) if rightkey()=1 then yrotate object 1210,wrapvalue(object angle y(1210)+3) if spacekey()=1 and playergrav#=0.0 then playergrav#=2.0 rem Get current object position posx#=object position x(1210) posy#=object position y(1210) posz#=object position z(1210) rem Handle a touch of gravity playergrav#=playergrav#-0.1 posy#=posy#+playergrav# rem Handle sliding collision for player object with other objects position object 1210,posx#,posy#,posz# if object collision(1210,0)>0 dec posx#,get object collision x() dec posy#,get object collision y() dec posz#,get object collision z() playergrav#=0.0 endif rem Set a size for the player object s#=object size y(1210)/2.0 rem Ensure camera stays out of static collision boxes if get static collision hit(oldposx#-s#,oldposy#-s#,oldposz#-s#,oldposx#+s#,oldposy#+s#,oldposz#+s#,posx#-s#,posy#-s#,posz#-s#,posx#+s#,posy#+s#,posz#+s#)=1 dec posx#,get static collision x() dec posy#,get static collision y() dec posz#,get static collision z() if get static collision y()<>0.0 then playergrav#=0.0 endif rem Update with new object position position object 1210,posx#,posy#,posz# rem Use camera tracker to follow player object angle#=object angle y(1210) camdist#=25.0 : camhigh#=posy#+10.0 : camfade#=3.5 set camera to follow posx#,posy#,posz#,angle#,camdist#,camhigh#,camfade#,1 rem Tilt camera down a little xrotate camera 15 rem For fun, slightly move pedastal step rem move object 10,0.01 rem Update screen sync rem End loop loop rem Restore object if ever leave this loop enable object zdepth 1210 |