资源描述
Flash AS3.0打造漂亮的水汶实例教程
在这个教程中,我们将用到置换图滤镜(DisplacementMapFilter)和BitmapData类的的杂点功能(perlinNoise),这两个家伙常常给我们带一些令人兴奋的效果,它们今天的合作为我们创造了一个漂亮的的水汶,看看下面的动画,应该还不错吧。
现在我开始来构建这个漂亮的水汶:
即然是水汶,我想首先要找一张含水的图片吧,百度一下吧,河道,湖泊,水池,你喜欢就行。
1. 新建一AS3.0文档,将帧频设为30,将你刚百度到的图片导入到库中,点右键,在属性面板中将“使用JPEG导入品质”前的钩钩去掉,这样做图片的体积就会大大地减小哦。
2. 新建一个影片剪辑元件,将图片拖到舞台上,设置图片的大小,你想设多大呢?反正我是按默认的550x400.图片在大小与文档大小一样大哈。点击对齐面板,相对于舞台居中对齐。
3. 回到主场景,将MC拖到舞台上,居中放置,为它设置一个实例名称,我用的是”pic”图层上锁。
4. 新插入一图层,将图片(注意是图片不是MC哈),拖到舞台上,打开对齐面板,宽高匹配,居中对齐。现在第1,2层的图像是完全重合的,请确认是这样的。选择图片,点击 修改>分离,将水面部分选出,删除。可以将第1层隐藏,看看删除后的效果。
如下图:
5. 新建一层用来写代码,打开动作面板,输入下列代码:
1. var bmp:BitmapData = new BitmapData(550,400);
2. var zh:DisplacementMapFilter = new DisplacementMapFilter(bmp,new Point(0,0),1,2,10,600);
3. var p1:Point = new Point();
4. var p2:Point = new Point();
5. var zdxg:Array = [p1,p2];
6. addEventListener(Event.ENTER_FRAME ,ld);
7. function ld(e:Event):void {
8. zdxg[0].x += 0.2;
9. zdxg[1].y += 0.1;
10. bmp.perlinNoise(168,5,2,4,true,true,2,true,zdxg);
11. pic.filters = [zh];
12. }
OK,测试影片,一个漂亮的水汶效果立即出现在你的眼前。
代码分析:
首先声明了一个与图片一样大的BitmapData类实例bmp,用来作为置换图滤镜的参数。
var bmp:BitmapData = new BitmapData(550,400);
然后声明一个置换图滤镜zh,将bmp作为参数。
var zh:DisplacementMapFilter = new DisplacementMapFilter(bmp,new Point(0,0),1,2,10,600);
接下来声明了两个点,并将这两个点放到到一个叫zdxg的数组中,这个数组将用于bmp产生杂点的参数。
var p1:Point = new Point();
var p2:Point = new Point();
var zdxg:Array = [p1,p2];
然后,在ENTER_FRAME事件中调用ld函数。
addEventListener(Event.ENTER_FRAME ,ld);
ld函数,动态改变两个点的位置,然后使bmp应用杂点功能,在每一帧的间隔产生不同的杂点效果,使置换滤镜效果产生变化,最后让影片剪辑pic,应用滤镜,实现水汶效果。
function ld(e:Event):void {
zdxg[0].x += 0.2;
zdxg[1].y += 0.1;
bmp.perlinNoise(168,5,2,4,true,true,2,true,zdxg);
pic.filters = [zh];
}
利用Flash的AS3.0代码制作3D旋转动画效果
效果演示:
〖本教程着重于代码的编写,版本AS 3.0。图形元件的制作不作讲解,请参看有关教程。〗
1、新建Flash文档,创建5 个图形,(或导入5张图片到库中)。
2、创建一个影片剪辑,1层为图片层2层为代码层。在1层把5张图片分别放在5帧中,在代码层输入stop(); 如图:
3、Ctrl + L 打开库,右键单击影片剪辑实例做链接,类名为:IconMenu 如图:
4、返回场景1,图层1为背景层,图层2为代码层。在图层1导入背景图片。图层2输入代码:
1. include "Math2.as"
2. //图片容器
3. var menu:Sprite=new Sprite();
4. //使图标移动
5. menu.x = 300;
6. menu.y = 200;
7. //注册事件侦听器
8. menu.addEventListener(Event.ENTER_FRAME,moveMenu);
9. this.addChild(menu);
10. //椭圆在x 和y 轴上的截距
11. var disx:Number = 200;
12. var disy:Number = 10;
13. //旋转速度
14. var speed:Number = 0;
15. initMenu(5);
16. function initMenu(n:int) {
17. for (var i:int; i<n; i++) {
18. var mc:MovieClip = new IconMenu();
19. //缩小图标
20. mc.scaleX = mc.scaleY = .5;
21. menu.addChild(mc);
22. }
23. }
24. //事件侦听器函数
25. function moveMenu(e:Event):void {
26. //获取图标数
27. var iconCount:int = menu.numChildren;
28. //定义数组
29. var depthArray:Array = new Array();
30. //把360度平分
31. var angle:Number = 360 / iconCount;
32. for (var z:int; z<iconCount; z++) {
33. //根据深度获取图标
34. var mc:MovieClip = menu.getChildAt(z);
35. //跳转到不同帧,来显示不同的图标
36. mc.gotoAndStop(z+1);
37. //设置图标的位置
38. mc.x = cosD(speed + angle*z) * disx;
39. mc.y = sinD(speed + angle*z) * disy;
40. setProp(mc,"alpha");
41. setProp(mc,"scaleX",.2,.7);
42. setProp(mc,"scaleY",.2,.7);
43. //保存图标到数组
44. depthArray[z] = mc;
45. }
46. //重新设置图标的深度
47. arrange(depthArray);
48. speed += 2;
49. }
50. function arrange(depthArray:Array):void {
51. //按照y坐标排序
52. depthArray.sortOn("y", Array.NUMERIC);
53. var i:int = depthArray.length;
54. while (i--) {
55. menu.setChildIndex(depthArray[i], i);
56. }
57. }
58. function setProp(mc:MovieClip,prop:String,n1:Number = .5, n2:Number = 1):void {
59. mc[prop] = ((mc.y + 2 * disy) / disy - 1) / 2 * (n2 - n1) + n1;
60. }
5、新建.as文档,保存名为:Math2.as (这个文档是进行三角函数的计算)
输入代码:
1. //角度转弧度
2. function angleToRadian(angle:Number):Number
3. {
4. return angle*(Math.PI/180);
5. }
6. //弧度转角度
7. function radianToAngle(radian:Number):Number
8. {
9. return radian*(180/Math.PI);
10. }
11. //计算正弦值
12. function sinD(angle:Number):Number
13. {
14. return Math.sin(angleToRadian(angle));
15. }
16. //计算余弦值
17. function cosD(angle:Number):Number
18. {
19. return Math.cos(angleToRadian(angle));
20. }
21. //计算反正切
22. function atan2D(y:Number, x:Number):Number
23. {
24. return radianToAngle(Math.atan2(y, x));
25. }
复制代码
把fla文档与Math2.as 文档保存在同一目录下,进行测试。
[AS3编程教学]从库中加载声音并控制播放
概述:Flash交互作品对于声音的控制是比较灵活和常用的,接下去笔者将抽空对声音控制写一批由简至难的教程,而本节教程详细讲述如何从库里加载一个声音文件到舞台上并控制其播放。
1. 首先,我们打开FlashCS5,按下Ctrl+N,新建一个Flash AS3文档,如下图所示:
2. 其次,我们需要导入一个mp3格式的音乐文件到库中。可以执行“文件/导入/导入到库”来操作,也可以直接从文件夹拖动到flash库里,如下图所示我们导入了声音文件:
3. 要用程序将声音加载到舞台控制播放,那么就需要给声音文件一个绑定的类名,所以我们在声音文件上单击右键/属性,然后点击ActionScript,勾选“为ActionScript导出和第一帧导出”,给声音一个链接类名:TestSound:
4. 选择主时间轴第一帧,按下F9,写以下代码,然后按下Ctrl+Enter,你便能听到音乐播放了:
import flash.media.Sound;
var mySound:Sound = new TestSound() as Sound;
mySound.play();
1. 播放函数有一个开始播放时间和重复播放次数的参数,我们让声音从第三秒开始播放,并且连续播放三遍需要这样写:
import flash.media.Sound;
var mySound:Sound = new TestSound() as Sound;
mySound.play(3000,3);
2. 还有一个就是循环播放,当声音播放结束后自动开始再次播放,重复无数遍,此时就需要增加一个事件监听,当播放结束后再次开始:
import flash.media.Sound;
var mySound:Sound = new TestSound() as Sound;
var sndChanel:SoundChannel = mySound.play();
sndChanel.addEventListener(Event.SOUND_COMPLETE,rePlaySound);
function rePlaySound(e:Event):void
{
mySound.play();
}
如果声音文件导入时提示“一个或多个文件未导入”,一般是mp3文件过大或者格式不兼容,你下载一个“全能音频转换通”,另存为一下就好了。
[AS3.0编程教学]最全的声音控制方法
网上做flash音乐播放器的人不少,这个作品主要是对声音的外部读取,然后保存,然后控制播放,暂停,停止等操作,今天这个作品就是向大家展示这些操作的方法。
1. 首先我们新建一个文件,在舞台上摆出下面这些按钮,我们今天对这个声音文件的操纵就如按钮所示:
2. 动手之前我们按下Ctrl+Shift+F12,打开ActionScript设置,将“自动申明舞台对象”打钩取消,我们将每个对象自己用Public声明,这样做的好处是开发时每个元件的属性方便引用和提醒。
3. 我们新建一个文档类,首先声明舞台上这些按钮,并定义声音变量:testSound,控制变量testChannel,testTrans,testPosition。
public var btnPlay:SimpleButton;
public var btnPause:SimpleButton;
public var btnStop:SimpleButton;
public var btnQuick:SimpleButton;
public var btnVocUp:SimpleButton;
public var btnVocDown:SimpleButton;
public var btnPanUp:SimpleButton;
public var btnPanDown:SimpleButton;
private var testSound:Sound;
private var testChannel:SoundChannel;
private var testTrans:SoundTransform;
private var testPosition:Number=0;
4. 首先用下面代码将一首叫做“test.mp3"的音乐加载到舞台。
public function TestSoundMain(){
testSound = new Sound();
testChannel=new SoundChannel();
testTrans = new SoundTransform();
testSound.load(new URLRequest("test.mp3"));
testSound.addEventListener(Event.COMPLETE,soundLoadOver);
}
private function soundLoadOver(e:Event):void {
testSound.removeEventListener(Event.COMPLETE, soundLoadOver);
soudLoad = true;
}
5. 播放按钮功能。控制音乐播放的按钮,单击后音乐开始播放,并记录音乐的SoundChannel属性。为了防止连击,我们定义一个isSoundPlay布尔变量判断音乐是否在播放中。
//播放按钮功能
private function playBtnEvent():void{
btnPlay.addEventListener(MouseEvent.CLICK, soundPlay);
}
private function soundPlay(e:MouseEvent):void {
if (isSoundPlay) return;
isSoundPlay = true;
testChannel = testSound.play(testPosition);
}
6. 暂停 按钮功能,该按钮让音乐暂停掉,为了能继续播放,我们需要记录下此时testChannel的位置,然后播放按钮单击时可以继续播放
//暂停按钮功能
private function pauseBtnEvent():void{
btnPause.addEventListener(MouseEvent.CLICK, soudPause);
}
private function soudPause(e:MouseEvent):void {
if (!isSoundPlay) return;
isSoundPlay = false;
testPosition = testChannel.position;
testChannel.stop();
}
7. 停止按钮功能,单击后音乐停止播放,记录位置归0.
//停止按钮功能
private function stopBtnEvent():void{
btnStop.addEventListener(MouseEvent.CLICK, soundStop);
}
private function soundStop(e:MouseEvent):void {
isSoundPlay = false;
testPosition = 0
testChannel.stop();
}
8. 快进声音。单击该按钮时,我们让声音从当前位置向前播放500毫秒,也就是快进半秒。
//快进按钮功能
private function qucikBtnEvent():void{
btnQuick.addEventListener(MouseEvent.CLICK, soudQuickPlay);
}
private function soudQuickPlay(e:MouseEvent):void {
if (!isSoundPlay) return;
testPosition = testChannel.position;
testChannel.stop();
testChannel = testSound.play(testPosition + 500);
}
9. 设定声音的音量增加。控制音量就需要soundTransform对象了,它其实是testChanel的soundTransform属性而已,通过它来控制音量。
//音量增加
private function volumeUpBtnEvent():void{
btnVocUp.addEventListener(MouseEvent.CLICK, upSoudVoc);
}
private function upSoudVoc(e:MouseEvent):void {
if (!isSoundPlay) return;
testTrans = testChannel.soundTransform;
var addedVoc:Number = testTrans.volume > 1?1:(testTrans.volume + 0.05);
testTrans.volume = addedVoc;
testChannel.soundTransform = testTrans;
}
10. 设定声音的音量减小。
//音量减小
private function volumeDownBtnEvent():void{
btnVocDown.addEventListener(MouseEvent.CLICK, downSoundVoc);
}
private function downSoundVoc(e:MouseEvent):void {
if (!isSoundPlay) return;
testTrans = testChannel.soundTransform;
var downVoc:Number = testTrans.volume < 0?0:(testTrans.volume - 0.05);
testTrans.volume = downVoc;
testChannel.soundTransform = testTrans;
}
11. 设定声音的平衡度向右,点击此按钮声音的平衡性会右移,直到变成右声道。
//平衡向右移动
private function panRightBtnEvent():void{
btnPanUp.addEventListener(MouseEvent.CLICK, upSoundPan);
}
private function upSoundPan(e:MouseEvent):void {
if (!isSoundPlay) return;
testTrans = testChannel.soundTransform;
var addedPan:Number = testTrans.pan > 1?1:(testTrans.pan + 0.05);
testTrans.pan = addedPan;
testChannel.soundTransform = testTrans;
}
12. 设定声音的平衡度向左,点击此按钮声音的平衡性会左移,直到变成左声道。
//平衡向左移动
private function panLeftBtnEvent():void{
btnPanDown.addEventListener(MouseEvent.CLICK, downSoundPan);
}
private function downSoundPan(e:MouseEvent):void {
if (!isSoundPlay) return;
testTrans = testChannel.soundTransform;
var downPan:Number = testTrans.pan < 0?0:(testTrans.pan - 0.05);
testTrans.pan = downPan;
testChannel.soundTransform = testTrans;
}
13. 最后别忘了所有你定义的函数都要写到音乐加载完成的那个函数里执行,或者构造函数也可以。就像下面这样子:
//加载音乐并控制播放
private function soundLoadOver(e:Event):void {
testSound.removeEventListener(Event.COMPLETE, soundLoadOver);
soudLoad = true;
playBtnEvent();
pauseBtnEvent();
stopBtnEvent();
qucikBtnEvent();
volumeUpBtnEvent();
volumeDownBtnEvent();
panRightBtnEvent();
panLeftBtnEvent();
}
14. 所有这些一个个代码合并到一起,就是我们主的文档类。制作完毕!
15. 我没有写声音加载过程和加载错误的监听,如果你的操作没有声音,那一定是你的声音文件有问题,换个文件试试;还有留意下方的报错提示。
16. 其实SoundTransform类还有四个读写属性:leftToLeft,leftToRight,rightToLeft,rightToRight,用来设置左右输入在左右扬声器的音量,有兴趣的同学可以细微研究:)
AS3编程教学]利用xml加载并控制声音
本教材旨在讲授两个知识点,一个是对xml的读取和解析,另一个是对加载外部音效的简单播放控制
1. 首先我们新建一个舞台,在舞台上创建三个按钮:加载btnLoad,播放btnPlay,暂停btnPause。,加载按钮用来加载xml和音乐文件,播放用来继续播放声音,暂停用来暂停声音,如下图所示:
2. 首先我们要写配置声音资源的xml文件,因为要加一个音乐,所以xml非常简单。
<?xml version="1.0" encoding="utf-8" ?>
<data>
<snd path="mSound.mp3">
</snd>
</data>
3. 按照顺序,我们先写“加载”按钮上的函数功能。加载按钮主要完成两步工作,第一是读取sndData.xml里面的音乐路径,第二是通过读取到得路径把音乐加载进来并播放。因此我们要定义一个声音类变量。
var loadSound:Sound = new Sound();
//-------------------------------
addMouseEvent();
function addMouseEvent():void{
btnLoad.addEventListener(MouseEvent.CLICK, loadSoundData);
}
function loadSoundData(e:MouseEvent):void{
var xLoader:URLLoader = new URLLoader();
xLoader.addEventListener(Event.COMPLETE,completeLoadData);
xLoader.load(new URLRequest("sndData.xml"));
}
function completeLoadData(e:Event):void{
var mXML:XML = XML(e.target.data);
var sndPath:String = String(mXML.snd.@path);
trace(sndPath);
loadSound.load(new URLRequest(sndPath));
loadSound.addEventListener(Event.COMPLETE, completeLoadSound);
}
function completeLoadSound(e:Event):void{
loadSound.play();
}
4. 单击“加载”按钮,当这段代码被执行时,声音便会被加载进来并且自动播放!
5. 接下来写声音的暂停和播放按钮。在AS3里,为了控制声音播放暂停,我们需要另外定义一个SoundChannel对象和一个记录声音播放位置的变量,来达到这一目的。
var loadSound:Sound = new Sound();
var sndChannel:SoundChannel;
var sndPostion:int;
//-------------------------------
addMouseEvent();
function addMouseEvent():void{
btnLoad.addEventListener(MouseEvent.CLICK, loadSoundData);
btnPlay.addEventListener(MouseEvent.CLICK, continuPlaySnd);
btnPause.addEventListener(MouseEvent.CLICK, pauseSnd);
}
//播放暂停
function continuPlaySnd(e:MouseEvent):void{
sndChannel = loadSound.play(sndPostion);
}
function pauseSnd(e:MouseEvent):void{
sndPostion = sndChannel.position;
sndChannel.stop();
}
6. 经过测试,似乎功能已经满足,但是也有问题,当声音在播放时,点击“播放按钮”,声音会二次播放重叠,其实,当声音正在播放的时候,播放不需要处理,只有暂停的时候才让它继续播放;同理,声音只有在播放的时候,暂停按钮才能起作用。所以我们定义需要一个是否播放的状态布尔变量,当播放时为true,暂停时为false,在按钮单击时加以判断:
var isSoundPlay:Boolean = false;
//播放暂停
function continuPlaySnd(e:MouseEvent):void{
if(isSoundPlay)return;
isSoundPlay = true;
sndChannel = loadSound.play(sndPostion);
}
function pauseSnd(e:MouseEvent):void{
if(!isSoundPlay)return;
isSoundPlay = false;
sndPostion = sndChannel.position;
sndChannel.stop();
}
7. 此时测试音乐,一切都正常,但是舞台上空白了很多,我们加一个波普效果,随着音乐的播放暂停同步运动,这样很明显地看到你对音乐的控制了,如图所示我们做一个简单的波形动画:
8. 给波形动画命名为mcWave,然后修改控制函数。
//播放暂停
function continuPlaySnd(e:MouseEvent):void{
if(isSoundPlay)return;
isSoundPlay = true;
sndChannel = loadSound.play(sndPostion);
mcWave.play();
}
function pauseSnd(e:MouseEvent):void{
if(!isSoundPlay)return;
isSoundPlay = false;
sndPostion = sndChannel.position;
sndChannel.stop();
mcWave.stop();
}
9. 此时再测试,就会有一个波形直观地显示音乐的播放暂停了。
10. 此时源文件目录如下:
1. 完整代码如下:
var loadSound:Sound = new Sound();
var sndChannel:SoundChannel;
var sndPostion:int;
var isSoundPlay:Boolean = false;
mcWave.stop();
//-------------------------------
addMouseEvent();
function addMouseEvent():void
{
btnLoad.addEventListener(MouseEvent.CLICK, loadSoundData);
btnPlay.addEventListener(MouseEvent.CLICK, continuPlaySnd);
btnPause.addEventListener(MouseEvent.CLICK, pauseSnd);
}
//加载音乐
function loadSoundData(e:MouseEvent):void
{
var xLoader:URLLoader = new URLLoader();
xLoader.addEventListener(Event.COMPLETE,completeLoadData);
xLoader.load(new URLRequest("sndData.xml"));
}
function completeLoadData(e:Event):void
{
var mXML:XML = XML(e.target.data);
var sndPath:String = String(mXML.snd.@path);
loadSound.load(new URLRequest(sndPath));
loadSound.addEventListener(Event.COMPLETE, completeLoadSound);
}
function completeLoadSound(e:Event):void{
sndChannel = loadSound.play();
isSoundPlay = true
mcWave.play();
}
//播放暂停
function continuPlaySnd(e:MouseEvent):void{
if(isSoundPlay)return;
isSoundPlay = true;
sndChannel = loadSound.play(sndPostion);
mcWave.play();
}
function pauseSnd(e:MouseEvent):void{
if(!isSoundPlay)return;
isSoundPlay = false;
sndPostion = sndChannel.position;
sndChannel.stop();
mcWave.stop();
}
flash as3使用,播放声音和加载外部声音文件
在AS3中使用声音跟AS2有很大的不同。先看下Flash帮助中的一些介绍,然后我们再使用导入到Flash中的声音做个小测试。
理解声音的结构
应用程序可以从4个地方加载声音:
· 运行时从外部声音文件里加载
· 内嵌到SWF文件里的声音资源
· 从连接到用户系统的麦克风上获取声音数据
· 从远程多媒体服务器,比如Flash Media Server获取声音流
可以等到声音全部加载后再播放,也可以边加载边播放。
ActionScript 3.0和Flash Player支持以mp3格式存储的声音。它们不能直接加载或播放其他格式的声音,比如WAV或AIFF。
使用Adobe Flash CS3 Professional,可以导入WAV或AIFF格式的声音,然后就可以把它们以MP3的格式嵌入到SWF文件中。Flash开发工具可以压缩嵌入的声音文件以减少文件大小,不过这样需要以降低声音质量的代价。更多信息查看 "Importing Sounds" in Using Flash.
ActionScript3.0声音使用flash.media包中的下列类
类
描述
flash.media.Sound
Sound类用来加载声音,管理声音的基本属性以及使声音开始播放
flash.media.SoundChannel
当程序播放一个声音对象的时候,会创建一个新的SoundChannel对象控制播放。SoundChannel对象同时控制声音的左右频道。每个播放的声音都有自己的SoundChannel对象。
flash.media.SoundLoaderContext
SoundLoader
展开阅读全文