There is another command : PERFORM CHECKLIST FOR ONSCREEN OBJECTS 0
This way is more accurate, but the bug is still there :
`
`============================================
`BlueIDE 2 V2.0.22a
`Dark Basic Professional - Version 1.071
`============================================
`
`
`Main Source File
`
SYNC ON
SYNC RATE 60
MAKE MATRIX 1,100,100,10,10
AUTOCAM OFF
FOR a = 1 TO 36
MAKE OBJECT CUBE a,10
POSITION OBJECT a, 50+40*SIN(a*10), 0, 50+40*COS(a*10)
NEXT a
// La fonction detecte les objets de TOUTES les cameras affichees a l'ecran, donc
// on doit s'arranger pour que la camera courante s'affiche par dessus les autres
// (la cam 0 est recouverte par la cam 1, elle meme recouverte par la cam 2, etc.)
//
current_cam=1
other_cam=0
IF CAMERA EXIST(other_cam)=0 THEN MAKE CAMERA other_cam
COLOR BACKDROP other_cam,RGB(0,128,0)
POSITION CAMERA other_cam, 50,100,50
POINT CAMERA other_cam,50,0,50
SET CAMERA VIEW other_cam, 0,0,256,256
SET CAMERA ASPECT other_cam,1
//
SET CAMERA TO IMAGE other_cam,1,256,256,0
MAKE CAMERA current_cam
COLOR BACKDROP current_cam,RGB(0,0,128)
POSITION CAMERA current_cam,50,10,50
SET CURRENT CAMERA current_cam
result$="OFF"
DO
PASTE IMAGE 1,0,0
TEXT 0,0, "Red spheres are supposed to be seen by the main camera"
old_tch1=tch1
tch1=SHIFTKEY()
IF tch1>old_tch1
alternative_method=(alternative_method~~1)
IF alternative_method
result$="ON"
ELSE
result$="OFF"
ENDIF
ENDIF
old_tch2=tch2
tch2=CONTROLKEY()
IF tch2>old_tch2
Bounds_Flag=(Bounds_Flag~~1)
offsetLimb = 0
ENDIF
IF RETURNKEY() THEN POSITION CAMERA current_cam,0,20,0
TEXT 260,76, "Alternative_method (Shiftkey) = "+result$
TEXT 260,100,"Position camera 0,20,0 (Returnkey)"
TEXT 0,460, "Bounds Flag (controlkey) = "+STR$(Bounds_Flag)
IF alternative_method THEN check_object()
FOR a = 1 TO 36
IF alternative_method
IF object_in_screen(a) THEN COLOR OBJECT a, 0xFFFF0000 ELSE COLOR OBJECT a, 0xFFFFFFFF
ELSE
IF OBJECT IN SCREEN(a) THEN COLOR OBJECT a, 0xFFFF0000 ELSE COLOR OBJECT a, 0xFFFFFFFF
ENDIF
NEXT a
ax# = WRAPVALUE(ax#+MOUSEMOVEY()*0.2)
ay# = WRAPVALUE(ay#+MOUSEMOVEX()*0.2)
ROTATE CAMERA ax#, ay#, 0
MOVE CAMERA UPKEY()-DOWNKEY()
IF offsetLimb = 0
TEXT 0,440, "Press space for the 'offset limb' test"
IF SPACEKEY()
offsetLimb = 1
FOR a = 1 TO 36
DELETE OBJECT a
MAKE OBJECT SPHERE a,10
//
OFFSET LIMB a,0,50+40*SIN(a*10), 0, 50+40*COS(a*10),Bounds_Flag
NEXT a
ENDIF
ENDIF
SYNC
LOOP
END
FUNCTION check_object()
//
// This method only work with primitive or .DBO object
//
IF function_check_object =0
GLOBAL function_check_object
GLOBAL function_MAX_OBJECT_CHECK=1024
function_check_object=MAKE MEMORY(function_MAX_OBJECT_CHECK)
ENDIF
FILL MEMORY function_check_object,0,function_max_object_check
PERFORM CHECKLIST FOR ONSCREEN OBJECTS 0
FOR i=1 TO CHECKLIST QUANTITY()
a=CHECKLIST VALUE A(i)
z=function_check_object+a
*z=(*z)||(a<>0)
NEXT i
ENDFUNCTION
FUNCTION object_in_screen(obj)
o=function_check_object+obj
return_value=(*o)&&255
ENDFUNCTION return_value
AMD Athlon(tm)XP 3200+ (2.2GHz) / DDR pc3200 (1024Mo) / Nvidia 6800GT (driver 178.24 WHQL)/ XP Pro SP3 / DirectX 9.0c (march 2008)/ DBPro 7.1