director 動(dòng)態(tài)事件傳遞 有時(shí)在director開(kāi)發(fā)過(guò)程中會(huì)遇到一些棘手的問(wèn)題,其中的原因之一是由于行為中包含有某些“陷阱”事件,比如點(diǎn)擊了一個(gè)帶有行為的角色,那么此點(diǎn)擊事件將停滯在此角色上,雖然你想讓其下的角色也能夠識(shí)別并對(duì)事件做出響應(yīng)。
on beginsprite me me .findlowersprite() end beginsprite
on mouseup me me .transmitclick() end mouseup
on findlowersprite me nsprite = me . spritenum - 1 rmyrect = sprite ( me . spritenum ). rect pnintersectsprite = 0 repeat with ntest = nsprite down to 1 rtestrect = sprite (ntest). rect rintersect = intersect ( rmyrect, rtestrect ) if rintersect <> rect ( 0 , 0 , 0 , 0 ) then pnintersectsprite = ntest exit repeat end if end repeat end findlowersprite
on transmitclick me if pnintersectsprite <> 0 then sendsprite ( pnintersectsprite, #mouseup ) end if end transmitclick
on beginsprite me me .findlowersprite() end beginsprite
on mouseup me me .transmitevent( #mouseup ) end mouseup
on findlowersprite me nsprite = me . spritenum - 1 rmyrect = sprite ( me . spritenum ). rect pnintersectsprite = 0 repeat with ntest = nsprite down to 1 rtestrect = sprite (ntest). rect rintersect = intersect ( rmyrect, rtestrect ) if rintersect <> rect ( 0 , 0 , 0 , 0 ) then pnintersectsprite = ntest exit repeat end if end repeat end findlowersprite
on transmitevent me , yevent if pnintersectsprite <> 0 then pmousepoint = the mouseloc rtestrect = sprite (pnintersectsprite). rect if pmousepoint. inside ( rtestrect ) then sendsprite ( pnintersectsprite, yevent ) end if end if end transmitevent