极光下载站 - 打造齐全的绿色软件家园

极光下载站

当前位置: 首页 媒体动画 Director Director8制作模拟刮胡子演示程序(三)

Director8制作模拟刮胡子演示程序(三)

时间:2006/7/22 13:37:32 作者:佚名 人气:44


以本程序为例子,我们的目的: 程序记录鼠标移动的轨迹,从鼠标滑动的点为左上角开始,记录一个虚拟的矩形区域,将这个矩形坐标(相对与该图形左上角为原点)记录下来。然后通过targetimage (就是我们这个程序的角色 "target "-未刮胡子的照片图案)调用 copyPixels 函数将 sourceimage (就是我们这个程序的角色 "source "-刮胡子后的照片图案)中鼠标滑动矩形区域的图形复制到相应的 targetimage 中,记住我们对 targetimage 角色的改动直接改动了 target 角色,所以我们必须有另外一个角色,它和 target 角色完全相同,但是名字不同,为的是在需要的时候恢复 target 角色的原貌。所以我们从新复制一下 target 角色,放在第 3 号角色,起名字为 "s"。下面会讲解为什么这样作。现在开始制作:
1: 在第一帧的帧脚本 frame script 中写上
on exitframe me
go the frame
end
目的是让播放停止在这个帧上。让 director 等待响应鼠标事件。 将 target 角色拖动到 score 中的第一帧的 6号通道(可以是任何通道,但是最好不要用 1,2 号通道,因为你有可能将来在这些地方放置底图。所以尽量将变动的角色放在稍微高通道中。这是个人习惯的问题)。鼠标右键单击这个角色选中 script 打开该 sprite 的 sprite script 。
我们必须响应 exitfame 事件。首先我们将定义一个属性(这是一个习惯性的写法)
就是在每个角色的 beginsprite 事件handle 中做初始化属性和某些全局变量的操作。
这部分代码是为了方便对大量 sprite(me.spritenum) 的调用而写的,其实在本程序中并不一定需要
property pMySprite
on beginsprite me
pMySprite = sprite(me.spritenum)
end下面是真正的核心代码
通过在响应 exitframe handle 中处理 mouseDown 来复制位图,也就是当鼠标在图形上拖动的时候将鼠标滑过的位置的矩形小区域记录下来,然后从 source 角色中将相应矩形区域的位图部分复制到 target 角色部分相应的位图部分。
on exitframe me
if (the stillDown) then - 当鼠标一直按下的时候,才开始复制
thisPoint = the mouseLoc - point(pMySprite.left, pMySprite.top) - 将记录鼠标相对与角色左上角为原点的坐标
top = thisPoint.locV
left = thisPoint.locH
sourceRect = rect (left, top, left + 10, top + 10) -- 定义一个虚拟的小矩形复制区域(从鼠标开始处计算),我们这里采用 10*10 的方块
member("target").image.copyPixels (member("source").image, sourceRect, sourceRect)
-- 将从 "source" 角色中复制一个小块到 target 角色中相同坐标区域部分。
end if
end(出处:风闪网路学院)
<
标签
分享到:

公众号