Well, if I use this method:
for a=1 to 1000
move object sphere,0.001 on x-axis
if collision then reposition
same for z-axis
same for y-axis
next a
Then its very accurate, but it will take some time.
example:
sync on
sync rate 0
make object cube 1,5
make object sphere 2,5
make object cube 3, 20
position object 1,0,0,0
position object 2, 15,2,15
position object 3, 30,2,30
number = 1
ball = 2
wall = 3
do
if leftkey()=1 then yrotate object number,wrapvalue(object angle y(number)-1.0)
if rightkey()=1 then yrotate object number,wrapvalue(object angle y(number)+1.0)
if upkey()=1
for a=1 to 100
x# = object position x(number) : y# = object position y(number) : z# = object position z(number)
position object number, x#+sin(object angle y(number))/100,y#,z#
if SQRT( (object position x(number)-object position x(ball))^2 + (object position y(number)-object position y(ball))^2 + (object position z(number)-object position z(ball))^2) < 5 then position object number, x#, y#, z#
if Box_Collision(number,wall) = 1 then position object number, x#, y#, z#
x# = object position x(number)
position object number, x#,y#,z#+cos(object angle y(number))/100
if SQRT( (object position x(number)-object position x(ball))^2 + (object position y(number)-object position y(ball))^2 + (object position z(number)-object position z(ball))^2) < 5 then position object number, x#, y#, z#
if Box_Collision(number,wall) = 1 then position object number, x#, y#, z#
next a
endif
position camera object position x(1),45,object position z(1)
point camera object position x(1),0,object position z(1)
sync
loop
Function Box_Collision(nr1,nr2)
if object position x(nr1) > (object position x(nr2) - object size x(nr2) / 2 )
if object position x(nr1) < (object position x(nr2) + object size x(nr2) / 2 )
if object position y(nr1) > (object position y(nr2) - object size y(nr2) / 2)
if object position y(nr1) < (object position y(nr2) + object size y(nr2) / 2)
if object position z(nr1) > (object position z(nr2) - object size z(nr2) / 2)
if object position z(nr1) < (object position z(nr2) + object size z(nr2) / 2)
exitfunction 1
endif
endif
endif
endif
endif
endif
endfunction 0
Another method is to check for the distance, if the distance is bigger than 0.0 then move the object using some limitations:
Moveable object's max speed = 1.0
And using this if-statement you can move it:
if distance > 0.0
speed# = distance
if speed# > max speed# (1.0) then speed# = max speed#
endif
and move the object by using speed#
But I won't change my tutorial. It's made for beginners, not for experts. They will never understand a function that contains 100+ calculations just for moving 1 object
Quote: "
UPDATED
Amd 2800+
1024mb pc3200
A7N8X - Deluxe
Ati Radeon 9800PRO 256mb"