【Director教程】用距离控制声音

4/7/2006来源:Director教程人气:9418

(只是想为多媒体的发展尽一份力。以下是翻译director online 上的一篇关于用距离控制声音的文章,觉得简单有用,所以给大家共享。动机单纯。-------alalala)

  我需要将一张图片放到舞台的中央,以便鼠标靠近的时候声音会马上淡入,同时图片做淡入淡出的发光效果。
  还记得高中学过的几何学如何计算直角斜边的长度吗?我们来回顾一下。假设你知道了两条直角边x,y。计算第三条边的长度的公式是

  X2 + Y2 = Z2

  很容易得出z的长度始终大于x或y的长度。

  现在我们把它应用到你问题中去。设想一下直角边的斜边z由你的精灵的坐标和鼠标的坐标来决定。x是你的精灵和鼠标的水平距离,y是你的精灵和鼠标的垂直距离。现在,以上的公式可改为


set x = the mouseH - the locH of sPRite whatever
set y = the mouseV - the locV of sprite whatever
x2 + y2 = the distance2

  这就是我们要用的概念。因为距离永远不可能为负数,当我们编写lingo的时候,我们使用绝对值属性来设定x和y。同时,我亲向于使用描述性的变量来定义x,y。在这个例子中我将使用hinc和vinc来表示“水平增量和垂直增量”。

  接下来的步骤就是是这个距离和以下的事件关联:1)声音通道的音量。2)精灵的混合值(发光的精灵)。音量的范围是从0到255,既然我们希望声音在鼠标接近的时候增加,我们可以简单的制定音量等于255减去距离。为了增强可操作性,我创建了“fade\"变量。我们使用“fade\"变量来乘以距离,这样我们可以使音量在较短的距离里增减。(fade的值越大,变化的越快)。

  最后,你需要改变墨水的混合值,来实现发光的效果。在这个行为里,我们让这个混合值与音量关联。混合值由1到100,为了使它适应音量的0到255的变化范围,我们设定混合值为 数值/256。


  以下便是这个行为。你需要制定一下发光的精灵。


property pMyLocH
property pMyLocV
property pFade
property pSoundChannel
property pMySprite

on getPropertyDescriptionList me
set pdlist to [:]
set the floatPrecision to 1
addprop pdlist, #pFade, [#comment:\"Rate of fade\", #format:#float, #default:3.0]
addprop pdlist, #pSoundChannel, [#comment:\"Which sound channel\", #format:#integer, #default:1]
return pdlist
end getPropertyDescriptionList

on beginSprite me
set pMySprite = the spriteNum of me
set pMyLocH = the locH of sprite pMySprite
set pMyLocV = the locV of sprite pMySprite
set the blend of sprite pMySprite to 0
end

on exitframe me
set hInc = abs(the mouseH - pMyLocH)
set vInc = abs(the mouseV - pMyLocV)

set distance = sqrt((hInc * hInc) + (vInc * vInc))
set the volume of sound pSoundChannel = 255 -(distance * pFade)
set the blend of sprite pMySprite = the volume of sound pSoundChannel/2.56
end