麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 網站 > 媒體動畫 > 正文

Director實例剖析:Director 動態事件傳遞(1)

2024-09-08 19:27:04
字體:
來源:轉載
供稿:網友
director 動態事件傳遞
   有時在director開發過程中會遇到一些棘手的問題,其中的原因之一是由于行為中包含有某些“陷阱”事件,比如點擊了一個帶有行為的角色,那么此點擊事件將停滯在此角色上,雖然你想讓其下的角色也能夠識別并對事件做出響應。

   下面的樣本文件演示了這個問題:如果你點擊了上面的角色,則只能獲得從上面角色發送來的消息,即使你的點擊碰巧發生在兩個角色交疊的范圍之內。


播放,以上示例,需下載此插件。 點擊下載插件

   雖然你想讓鼠標事件通過角色層向下傳遞,但由于director在行為中獲得事件的方式,這一點根本無法做到。例如,使用pass命令不會有任何效果。

   或許你會想到使用sendsprite命令告訴位于當前角色下面的任何角色:一個事件已經發生,需要做出適當的響應。

   或許你想讓行為做這樣的事情:使用交疊測試來尋找其下的角色,即使被上方的角色遮擋,仍可以將點擊事件傳遞給下方的角色。

property pnintersectsprite

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

   初看起來這可能是一個具有可行性的解決方案,但如果你點擊下面樣本文件中的紅色矩形,將會看到仍然存在的一些問題。


播放,以上示例,需下載此插件。 點擊下載插件

   看到了嗎?不管你在角色2中的何處點擊,角色1都非?!熬琛薄R簿褪钦f,雖然沒有直接點擊兩角色交疊的地方,但程序認為你這樣做了。

   這便是問題所在,而要想解決此問題,首先需要查明給出角色是否真的和一個附帶此行為的角色相交疊,其次必須確定當事件被傳遞時下面的角色是否碰巧位于鼠標下方,如果不是的話就不將此事件發送給下面的角色層。

property pnintersectsprite

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


   由于確定了單擊發生時鼠標是否位于下層角色之上,上面的行為將給出更可靠的結果,下面的樣本文件動態演示了這一點。


播放,以上示例,需下載此插件。 點擊下載插件

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 99国产精品欲a | 免费观看高清视频网站 | 天天透天天狠天天爱综合97 | 一级电影免费在线观看 | 欧美成人理论片乱 | 亚洲va久久久噜噜噜久久男同 | 日本欧美一区二区三区视频麻豆 | 亚洲免费观看视频 | 激情久久一区二区 | 免费观看一级黄色片 | 水多视频在线观看 | 男人的天堂视频网站 | 一级毛片免费在线 | 国产精品片一区二区三区 | 一级α片| 亚洲涩涩图| 久草在线高清视频 | 国产精品自拍av | 精品亚洲国产视频 | 成年性羞羞视频免费观看 | 91精品国| 久久久久久久免费精品 | 国产精品av久久久久久网址 | 在线a毛片免费视频观看 | 成人一级视频在线观看 | 国产成人精品一区二区仙踪林 | 黄wwww| 欧美成人三级视频 | 国产流白浆高潮在线观看 | 91精品免费在线 | 黄a大片| 国产手机在线视频 | 一级黄色免费 | 久久精品成人影院 | 久久亚洲美女视频 | 亚洲第一男人天堂 | 成年免费视频黄网站在线观看 | 蜜桃一本色道久久综合亚洲精品冫 | 国产黄色录像片 | 国产一区精品在线观看 | 久久精品在这里 |