主题:  我的放大镜行为!--大家来挑挑刺:)

threem

职务:普通成员
等级:2
金币:1.0
发贴:338
#12001/11/26 11:17:22
以下为完整代码! 将他们复制到director里即可!
=======================================================
----------------放大镜行为 2001.0"


-- "这个行为将实现放大指定图象精灵内的特定区域!"
-- "在使用前需设定相关参数!见属性设置对话框!"
----------------操作可选项提示:"
-- 1.鼠标右键开启/关闭放大镜!
-- 2.鼠标左键持续按下调节放大比例!
-- 3.“+”、“-”调节放大比例!
-- 4.设定功能有效区域!"
-- 5.设置放大图片的油墨类型!"
-- 6.添加设置放大图片的边框及颜色!
-- 7.设置放大图片的透明度!"
-- 8.保留两个用户自定义lingo通道!
-- 9.设定当前帧的循环运行!
-- 10.可设定联动精灵,实现添加各类遮罩!
-- 11.设定放大镜运行时背景音乐!
-- 12.设定放大镜跟踪鼠标位置!
-- 13.使用--sendSprite(0, #startSeek)--语句由外部程序控制!

-- "版权作者:"
-- Three-m
-- E-mail: Three-m@etang.com

--/////////////////////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\**

property far
property scopesprite
property showsprite
property oldmouselocthreem
property canmicroshowA
property canmicroshowB
property holdframe
property cankeysetsize
property activerect
property framelongo1
property framelongo2
property linesize
property thecolorname
property MyblendLevel
property MyuseFastQuads
property Myink
property microtimeA
property microtimeB
property maxfar
property leftmouseSetSizeUP
property canleftmouseSetSize
property BcGrSprite
property thesound
property soundchanol
property canplaySound
property trackmouse
property rightmouseSet


on beginsprite me
case true of
(sprite(scopesprite).member.type<>#bitmap):
alert "对不起!"&"sprite "&scopesprite&" 必须为图片演员精灵!请重新设置!"
halt
(sprite(showsprite).member.type<>#bitmap):
alert "对不起!"&"sprite "&showsprite&" 必须为图片演员精灵!请重新设置!"
halt
(sprite(scopesprite).member.rect>sprite(showsprite).member.rect):
alert "对不起!"&"sprite "&scopesprite&" 的图片演员必须小于 "&"sprite "&showsprite&" 必须为图片演员精灵!请重新设置!"
halt
end case
persent=far/100
if (sprite(scopesprite).member.height maxfar=integer(sprite(scopesprite).member.height/2)
else
maxfar=integer(sprite(scopesprite).member.width/2)
end if
set far=maxfar-integer(maxfar/persent)
set microtime=0
sprite(scopesprite).ink=Myink
sprite(scopesprite).blend=MyblendLevel
case thesound of
"无背景音乐":
canplaySound=false
otherwise:
canplaySound=true
if canplaySound then
if canmicroshowA=true then puppetSound soundchanol, member(thesound)
end if
end case

end



on enterframe me
testmouse
end


on soundcontral bool
case bool of
true:
if sound(soundchanol).isBusy() then
sound(soundchanol).play()
else
puppetSound soundchanol, member(thesound)
end if
false:
sound(soundchanol).pause()
end case
end


on rightMouseUp
if rightmouseSet then startSeek
end rightMouseUp


on startSeek
set canmicroshowA=not canmicroshowA
if canplaySound then soundcontral canmicroshowA
fdj canmicroshowA
end


on leftmouseSetSize
if the mouseDown then
microtimeA=microtimeA+0.4
if microtimeA>microtimeB+1 then
microtimeB=microtimeA
case leftmouseSetSizeUP of
true:
if (far+2) far=far+2
fdj true
end if
false:
if far-2>0 then
far=far-2
fdj true
end if
end case
end if
end if
end


on mouseUp
leftmouseSetSizeUP=not leftmouseSetSizeUP
end mouseUp




on scopelimite
case false of
(inside(the mouseloc,sprite(showsprite).rect)):
return false
(intersect(sprite(showsprite).member.rect,getrectInPic())=getrectInPic()):
return false
otherwise:
return true
end case
end



on keydown
if canmicroshowA=false then exit
if cankeysetsize=true then
case chartonum(the key) of
43:
if scopelimite() then
far=far+2
fdj true
end if
45:
if far-2>0 then
far=far-2
fdj true
end if

end case
end if
end


on testmouse
case canmicroshowA of
true:
if the mouseloc<>oldmouselocthreem then
oldmouselocthreem=the mouseloc
set canmicroshowB=true
else
set canmicroshowB=false
end if
end case
end

on active
return inside(the mouseloc,sprite(activerect).rect)
end


on exitframe me
if active() then
if canleftmouseSetSize then leftmouseSetSize
case canmicroshowB of
true:
fdj true
end case
else
fdj false
end if
if framelongo1<>"" then do framelongo1
if framelongo2<>"" then do framelongo2
if holdframe=true then go to the frame
end


on getrectInPic
locInPic=mapStageToMember(sprite showsprite, the mouseloc)
sourcePicH=sprite(scopesprite).member.width
sourcePicV=sprite(scopesprite).member.height
rectInPic=inflate(rect(locInPic[1]-sourcePicH/2,locInPic[2]-sourcePicV/2,locInPic[1]+sourcePicH/2,locInPic[2]+sourcePicV/2),-far,-far)
return rectInPic
end



on fdj bool
case bool of
true:
sprite(scopesprite).visible=true
if trackmouse then sprite(scopesprite).loc=the mouseloc
if BcGrSprite<>"没有联动精灵" then
sprite(BcGrSprite).visible=true
sprite(BcGrSprite).loc=sprite(scopesprite).loc
end if
cursor 200
if scopelimite() then
sprite(scopesprite).member.image.copyPixels(sprite(showsprite).member.image, \
sprite(scopesprite).member.image.rect, getrectInPic(),[#dither:1,#useFastQuads:MyuseFastQuads])
drawlinetest
end if
false:
cursor 0
sprite(scopesprite).visible=false
if BcGrSprite<>"没有联动精灵" then
sprite(BcGrSprite).visible=false
end if
end case
updatestage
end


on drawlinetest
if sprite(scopesprite).ink<>9 then
drawline
end if
end

on drawline
sprite(scopesprite).member.image.draw(sprite(scopesprite).member.rect,\
[#shapeType:#rect, #lineSize:getlinesize(),#color: getcolor()])
end

on getcolor
case thecolorname of
"红":
return rgb(255, 0,0)
"兰":
return rgb(0, 0,255)
"黑":
return rgb(0,0,0)
"白":
return rgb(255,255,255)
"绿":
return rgb(0,255, 0)
end case
end

on getlinesize
case linesize of
"没有边框":
set thelinesize=0
return thelinesize
otherwise:
return linesize
end case
end

on isOKToAttach me,SpriteType,spritenum
if SpriteType= #script then
return true
end if
end isOKToAttach




on getPropertyDescriptionList
set showsprite=[]
set showsprite2=[]
set sounds=["无背景音乐"]
repeat with spritenum=1 to 150
case sprite(spritenum).member.type of
(#bitmap):
append showsprite,spritenum
append showsprite2,spritenum
(#shape),(#vectershape),(#text),(#field):
append showsprite2,spritenum
end case
end repeat
repeat with memnum=1 to 10000
case member(memnum).type of
(#sound):
append sounds,memnum
end case
end repeat
set showsprite3=duplicate(showsprite2)
addat showsprite3,1,"没有联动精灵"

vPDList = [:]
setaProp vPDList, #showsprite, [#comment:"请选择被放大的图片精灵:",#format: #string, #range:showsprite,#default:0]
setaProp vPDList, #scopesprite, [#comment:"请选择用作放大镜的图片精灵:", #format: #string, #range:showsprite,#default:0]
setaProp vPDList, #activerect, [#comment:"在哪个精灵范围内使用放大镜:",#format: #string, #range:showsprite2,#default:0]
setaProp vPDList, #BcGrSprite, [#comment:"设定放大镜精灵的联动精灵:",#format: #string, #range:showsprite3,#default:0]
setaProp vPDList, #Myink, [#comment:"放大图象的油墨效果:",#format:#ink,#default:0]
setaProp vPDList, #MyblendLevel, [#comment:"放大图象透明度:",#format: #integer, #range:[#min:0,#max:100,#jump:5,#acceleration:5],#default:100]
setaProp vPDList, #far, [#comment: "设定初始化放大比例( % ):",\
#format: #integer, #range:[#min:100,#max:1000,#jump:5,#acceleration:5],#default:100]
setaProp vPDList, #holdframe, [#comment:"在当前帧设置循环:",#format:#boolean,#default:0]
setaProp vPDList, #rightmouseSet, [#comment:"启用右键激活控制功能:",#format:#boolean,#default:1]
setaProp vPDList, #canmicroshowA, [#comment:"初始时是否可用:",#format:#boolean,#default:0]
setaProp vPDList, #cankeysetsize, [#comment:"开启键盘比例调节快捷键:",#format:#boolean,#default:1]
setaProp vPDList, #trackmouse, [#comment:"放大镜精灵跟随鼠标位置:",#format:#boolean,#default:1]
setaProp vPDList, #canleftmouseSetSize, [#comment:"开启鼠标左键比例调节:",#format:#boolean,#default:1]
setaProp vPDList, #MyuseFastQuads, [#comment:"允许非矩形截取:",#format: #boolean,#default:0]
setaProp vPDList, #linesize, [#comment:"选择边框线大小:",#format: #string, #default:"",#range:["没有边框",1,2,3,4,5,6,7,8]]
setaProp vPDList, #thecolorname, [#comment:"选择边框颜色:",#format: #string, #default:"",#range:["红","兰","绿","黑","白"]]
setaProp vPDList, #thesound, [#comment:"浏览时播放音乐:",#format: #string, #range:sounds,#default:0]
setaProp vPDList, #soundchanol, [#comment:"音乐播放通道:",#format: #string, #range:[1,2,3,4,5,6,7,8],#default:1]
setaProp vPDList, #framelongo1, [#comment:"本帧中运行处理程序01:",#format: #string, #default:""]
setaProp vPDList, #framelongo2, [#comment:"本帧中运行处理程序02:",#format: #string, #default:""]
return vPDList
end getPropertyDescriptionList


on getBehaviorTooltip me
return \
"放大镜行为 2001.0" & RETURN & RETURN & \
"这个行为将实现放大指定图象精灵内的特定区域!" & \
"在使用前需设定相关参数!见属性设置对话框!" & RETURN & RETURN & \
"操作可选项提示:" & RETURN & \
"1.鼠标右键开启/关闭放大镜!" & RETURN & \
"2.鼠标左键持续按下调节放大比例!" & RETURN & \
"3.“+”、“-”调节放大比例!" & RETURN & \
"4.设定功能有效区域!" & RETURN & \
"5.设置放大图片的油墨类型!" & RETURN & \
"6.添加设置放大图片的边框及颜色!" & RETURN & \
"7.保留两个用户自定义lingo通道!" & RETURN & \
"8.可设定联动精灵,实现添加各类遮罩!" & RETURN & \
"9.设定当前帧的循环运行!" & RETURN & \
"10.设定放大镜运行时背景音乐!" & RETURN & \
"11.设定放大镜跟踪鼠标位置!" & RETURN & \
"12.使用“sendSprite(0, #startSeek)”语句由外部程序控制!" & RETURN & \
"13.设置放大图片的透明度!"
end getBehaviorTooltip





on getBehaviorDescription me
return \
"放大镜行为 2001.0" & RETURN & RETURN & \
"这个行为将实现放大指定图象精灵内的特定区域!" & \
"在使用前需设定相关参数!见属性设置对话框!" & RETURN & RETURN & \
"操作可选项提示:" & RETURN & \
"1.鼠标右键开启/关闭放大镜!" & RETURN & \
"2.鼠标左键持续按下调节放大比例!" & RETURN & \
"3.“+”、“-”调节放大比例!" & RETURN & \
"4.设定功能有效区域!" & RETURN & \
"5.设置放大图片的油墨类型!" & RETURN & \
"6.添加设置放大图片的边框及颜色!" & RETURN & \
"7.保留两个用户自定义lingo通道!" & RETURN & \
"8.可设定联动精灵,实现添加各类遮罩!" & RETURN & \
"9.设定当前帧的循环运行!" & RETURN & \
"10.设定放大镜运行时背景音乐!" & RETURN & \
"11.设定放大镜跟踪鼠标位置!" & RETURN & \
"12.使用--sendSprite(0, #startSeek)--语句由外部程序控制!" & RETURN & \
"13.设置放大图片的透明度!" & RETURN & RETURN & \
"版权作者:" & RETURN & \
"* Three-m " & RETURN & \
"*Three-m@etang.com"
end getBehaviorDescription




草原风

职务:版主
等级:5
金币:13.0
发贴:3489
#22001/11/26 16:41:49
好东东