国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

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

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

2024-09-08 19:27:03
字體:
來源:轉載
供稿:網友
director 動態事件傳遞
   那么更下層的其他角色該怎么辦呢?忽略它們嗎?也就是說,為什么不將此事件傳遞給所有下層的角色呢?

   我們必須考慮的很重要的一點就是運行時間問題。director允許在單幀中顯示多達1000個角色,所以為了從一個行為中傳遞此事件,我們可能需要測試999次。

   但其他一些事件也有可能發生,像mousedown、mouseenter等等,忽略它們并不是一個好的想法,因此可以在getpropertydescriptionlist中添加一些參數,以允許我們確定哪些事件將獲得消息,哪些事件不獲得消息。

   最后,我們還應考慮到可見性和運動狀態。因為director是一個動態的工作環境,角色有時會重疊,有時不會重疊,所以最好能夠動態偵測交疊狀態,此外還可以添加一個參數,以使我們能夠選擇是否給一個已設置為不可見的角色發送事件。

   下面的影片包含了一個基本完成的行為,允許director動態判定一個給定角色是否正和當前角色及鼠標位置交疊,一旦如此,行為將向底層角色發送指定的任何事件。


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

   稍后的director影片使用了此行為的一個修改版本。原來的行為認為舞臺上沒有動畫發生,雖然這樣的行為已經非常適合于靜態使用了,但稍后的版本更適合于動態使用。

   當然,你可以根據自己的需要添加其他參數,以最大限度的提高代碼庫的利用率。


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

   就象你看到的那樣,背景動畫并不會導致行為失效,因為它能夠很清楚的判定兩個矩形何時交疊,何時不交疊,并做出恰當的響應。

   下面是最終影片中完整的“動態事件傳遞”行為的全部代碼。

property pnintersectsprite
property pbpropagatemousedown
property pbpropagatemouseup
property pbpropagatemouseenter
property pbpropagatemouseleave
property pbpropagatemousewithin
property pbpropagaterightmousedown
property pbpropagaterightmouseup
property pbpropagatetoinvisiblesprite
property pbassumestaticstage

on beginsprite me
me .findlowersprite()
end beginsprite

on mousedown me
if pbpropagatemousedown = true then
me .transmitevent( #mousedown )
end if
end mousedown

on mouseup me
if pbpropagatemouseup = true then
me .transmitevent( #mouseup )
end if
end mouseup

on mouseenter me
if pbpropagatemouseenter = true then
me .transmitevent( #mouseenter )
end if
end mouseenter

on mouseleave me
if pbpropagatemouseleave = true then
me .transmitevent( #mouseleave )
end if
end mouseleave

on mousewithin me
if pbpropagatemousewithin = true then
me .transmitevent( #mousewithin )
end if
end mousewithin

on rightmousedown me
if pbpropagaterightmousedown = true then
me .transmitevent( #rightmousedown )
end if
end rightmousedown

on rightmouseup me
if pbpropagaterightmouseup = true then
me .transmitevent( #rightmouseup )
end if
end rightmouseup

on findlowersprite me
   pnintersectsprite = 0
if pbassumestaticstage = true then
     nsprite = me . spritenum - 1
     rmyrect = sprite ( me . spritenum ). rect
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 if
end findlowersprite

on transmitevent me , yevent
   pmousepoint = the mouseloc
if pnintersectsprite <> 0 then
     rtestrect = sprite (pnintersectsprite). rect
if pmousepoint. inside ( rtestrect ) then
if sprite (pnintersectsprite). visible = true or ( sprite (pnintersectsprite). visible = false and pbpropagatetoinvisiblesprite = true ) then
sendsprite ( pnint

[1] [2] 下一頁  

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 称多县| 通许县| 巴彦县| 新巴尔虎左旗| 东辽县| 平果县| 克山县| 东山县| 桐梓县| 嘉义市| 哈密市| 勃利县| 嘉祥县| 定州市| 舟曲县| 元朗区| 屏山县| 沅江市| 郸城县| 布尔津县| 蒲城县| 桐乡市| 恩平市| 南宫市| 开化县| 洪雅县| 中超| 兰坪| 孝义市| 烟台市| 石台县| 东阳市| 呼和浩特市| 洛南县| 白玉县| 江西省| 阜阳市| 年辖:市辖区| 建宁县| 梅河口市| 高淳县|