到目前为止,MIDI 一直是移动设备上的标准声音格式。虽然这种格式很简单,但它在音质和能够产生的音效数量和类型上非常有限。通过
MIDI 产生的音效取决于作为移动设备芯片一部分的波形表。与数字音频不同,MIDI 文件中不包含任何声音,它包含的是一套指令,用以触发手机芯片内的音效。相反,数字音频包含了声音本身,这声音可以是广播、语音或者震动音。数字音频的音质取决于录音或存储时的采样率。我们大多数人都对
MP3 数字音频格式很熟悉。比特率或采样率越高,音质就越好。但是,较高的比特率也意味着文件更大。
本文说明的技巧涉及数字音频文件的分层,可为数字音乐人所采用。在 Flash 中,您可以重用视觉元素,从而避免增大导出的 SWF 电影,对音频也可以这样做。通过导入单独的元素或乐曲的一部分(低音、鼓...
完整阅读本文...]]>
Actionscript animation 简明教程
本教程节选自bit-101.com的未正式出版的新书making things move的新书介绍。主要内容是关于速度,加速度,弹性,缓动,摩擦力,重力等内容,这里没有非常详尽的内容,如果你想知道更详尽的内容,可以预定购买作者的新书making
things move…相信一定是一本好书。引用keith peters的话就是你一定不要直接将代码粘过来用,只有理解了它的应用,才能运用自如。在本教程中本人对大部分内容进行了扩展讲解。希望对于初学或中级用户有所帮助,由于多年没有研究过数学物理,难免有误,希望多多指正。
1. 速度
物体的运动都是沿着一定的方向,以恒定或是加速度的方式的运动的。在FALSH中要使物体以一个恒定的速度运动,就需要我们在每一帧不断的累加恒定的速度。这里面我们使用一种帧的循环的方式,来使物体不断的累加恒定的速度,以达到目的地。对于帧的循环方式大致上有三种,一种是使用代码onEnterFrame,一种是使用setInterval,另一种就是使用二到三帧来达到循环,如果你对这三种方式不太熟,请查看帮助来学习。
在x轴方向的速度我们定义为vx,方向是向右,如果向左只要设为负值就可以。
例如:
代码:
vx=5;
onEnterFrame=function(){
my_mc._x+=vx; //你也可以写成 my_mc._x=my_mc._x+vx;
}
步骤:
1.打开Flash MX 2004,选择矩形工具,在主场景中画出下一个只有边框有矩形,本例该矩形大小为350*16像素。
2.再在主场景中仍用矩形工具画出一个只有填充而无边框的矩形,并按F8键将其转换为影片剪辑(注:其注册点一定要选在该矩形的最左侧),其实例名为bar
。本例该矩形大小为345*11像素。
3.将上述两矩形在主场景中排列好,使边框矩形嵌套填充矩形。
4.在上述两矩形旁边用文字工具拖出一动态文本框,其变量名为bar_per。
至此,准备工作就绪,即建立了两矩形框和一动态文本框,下面准备编写代码。
5.在主场景中,新建一层,选中该层第1帧,按F9键打开动作脚本编辑窗口,输入以下代码:
this.onLoad=function(){
myBytesTotal=_root.getBytesTotal();
}
this.onLoad();
this.onEnterFrame=function(){
myBytesLoaded=_root.getBytesLoaded();
bar_xscale=myBytesLoaded/myBytesTotal*100;
percent=Math.round(bar_xscale);
this.bar._xscale=bar_xscale;
this.bar_per=percent+"%";
if(myBytesLoaded==myBytesTotal){
delete this.onEnterFrame;
_root.nextFrame();
}else{
this.stop();
}
}6.从主场景时间轴第2帧起制作你的flash影片。
注解:
①
this.onLoad=function(){
myBytesTotal=_root.getBytesTotal();
}
此段代码是指,当影片剪辑(本例指两矩形和一动态文本框所存在的主场景)加载时,读...
完整阅读本文...]]>
既然手机上能够使用Flash动画主题,很多喜欢Flash的朋友一定会问,我们该怎么制作呢?Flash MX Pro 2004提供了一些现成的工具用来制作手机上的Flash动画主题,今天我们就一起用Flash
MX Pro 2004制作一个简单的手机动画主题,从而了解基本流程和方法。
背景知识:Flash Lite 的应用条件
Flash Lite是类似于Flash 4.0的手机用程序,为什么是Flash4这么早的版本呢?毕竟智能手机系统的CPU不能和电脑相比,要在手机上畅快的运行Flash动画必须对SWF文件有所限制,限制的内容主要在于:文件体积不超过20k,不能使用手机不支持的字体,不支持复杂的ActionScript,动画循环,过多的层、元素,不要使用图形元素以及透明效果等等。由于上述的种种条件,用Flash
MX Pro 2004创作的Flash动画最好使用Tween组合、关键帧动画、使用手机内置的字体、优化路径等等。
手机Flash主题动画制作
一、准备手机主题素材
根据要求设计的手机动作非常简单,因此我们可使用画面丰富的图片组合创作简单的动画效果。素材图片的大小要根据设计的手机主题的机型来决定,打开Flash
MX Pro 2004,选择从模板新建一个文件,可看到移动设备模板选项(图1)。

图1
移动设备模板提供了多种品牌手机的模板,这些都是直接能够在手机上运行的(Macromedia与其达成的合作),我们选择市面上比较普遍的诺基亚7650手机模板,确定后返回Flash编辑的主场景可以看到手机的外观,在层面板上还可看...
完整阅读本文...]]>
今天写了这个效果的代码
用在主页的diary里
觉得以前用scroll对象来控制文本框,滚动起来比较生硬
其中drag为滚动条名字
block为文本框
b_up,b_down为上下滚动按钮
主要方法是用block始终跟随drag的位置变化而滚动
而b_up,b_down还有鼠标滚轮都是直接控制drag的位置变化的,从而间接控制文本框的滚动
// JTL
// http://www.hartech.cn
// e-mail: jtl.zheng@gmail.com
//初始化函数
function Var() {
//滚动条与上下按钮的间隙
space = 31;
//上下按钮的滚动速度
updown_speed = 5;
//文本框的滚动范围
block_range = block._height-mark._height;
//文本框的初始位置
block_origin = block._y;
//滚动条的滚动范围
drag_range = b_down._y-b_up._y-2*space;
//滚动条的初始位置
drag_origin = b_up._y+space;
//初始化滚动条位置
drag._y = drag_origin;
//滚动缓冲系数
k = .1;
}
Var();
//block为文本框,始终跟随滚动条(drag)变化
block.onEnterFrame = function() {
//pos为文本框目标位置
pos = block_origin-(drag._y-drag_origin)*block_range/drag_range;
//缓冲效...
完整阅读本文...]]>
效果如下:
OK,下面我们来一步步的实现上面这个FLASH的功能:
1.打开Flash并新建一个300*200的场景
2.用工具栏中的画圆工具在场景中画一个适中的圆形
3.将这个圆形转化为元件,并设置为电影夹子——选择刚才所画的圆形,点击F8键或者点击[修改][Modify]-[转化为元件][Convert
to Symbol],在对话框中选择[电影夹子][Movie Clip],点击[确定][ok]
4.完成上一步后,我们在场景中点击这个元件,在属性面板中的[Instance Name]中输入Circle

5.现在我们可以在时间轴的第一桢写入我们的ActionScript命令——点击时间轴面板中的第一桢,点击F9或者[窗口][Window]-[动作][
Development Panels-Action],将下面的程序输入动作面板当中:
代码:
m = Microphone.get();
attachAudio(m);
m.setUseEchoSuppression(false);
onEnterFrame = function () {
circle._xscale = circle._yscale = m.activityLevel+50;
};
平台相关指令::日期和时间
GetDateDay()
status = FSCommand2( “GetDateDay” )
获得当前的日期(1-31)。
返回 -1 为不支持,支持则返回 1-31 之间的数字。
GetDateMonth()
status = FSCommand2( “GetDateMonth” )
获得当前的月份(1-12)。
返回 -1 为不支持,支持则返回 1-12 之间的数字。
GetDateWeekday()
status = FSCommand2( “GetDateWeekday” )
获得当前的月份(0-6)。
返回 -1 为不支持,支持则返回 0-6 之间的数字。
GetDateYear()
status = FSCommand2( “GetDateYear” )
获得当前的年份。
返回 -1 为不支持,支持则返回数字,如:2005。
GetLocaleLongDate()
status = FSCommand2( “GetLocaleLongDate”, “longdate” )
获取当前的长日期串。日期格式根据手机本身以及 Locale 来确定。日期值指向到一个字串。
返回 -1 为不支持,0 则为支持。
以下是两个返回的 longdate 的例子:
October 16, 2004
16 October 2004
GetLocaleShortDate()
status = FSCommand2( “GetLocaleShortDate”, “shortdate” )
获取当前的短日期串。日期格式根据手机本身以及 Locale 来确定。日期值指向到一个字串。
返回 -1 为不支持,0 则为支持。
以下是两个返回的 shortdate 的例子:
10/16/2004
16-10-2004
GetLocaleTime()
status = FSCommand2( “GetLocalTime”, “time” )
获取当前的时间串。时间格式根据手机本身以及 L...
完整阅读本文...]]>
这些资料其实是从 Flash Lite 1.1 的文档翻译来的,是为了今后查找的时候更方便一些而已。这些功能并不是所有手机都会支持,需要上机测试才能了解是否支持。
Flash Lite 1.1 目前支持功能相对较强的 FSCommand2,这在普通的 FLash 播放器中是不支持的。相对 FSCommand,有如下的不同:
FSCommand2 主要分成三类:普通指令、控制影片播放的指令、平台相关指令。下面是详细内容:
普通指令
普通指令::URL 编码相关
Escape
status = FSCommand2( “Escape”, original, encoded )
URL 编码指令,将 original 编码成 encoded。
返回 0 失败,返回 1 成功。
Example:
original_string = “hello, how are you?”;
status = fscommand2(”Escape”, original_string, “encoded_string”);
Unescape
status = FSCommand2( “Unescape”, encoded, original )
URL 解码指令,将 encoded 解码成 original。
返回 0 失败,返回 1 成功。
Example:
string2 = “Hello%7B%5BWorld%5D%7D”;
status = fscommand2(”Unescape”, string2, “normal_string”);
普通指令::输入框相关
SetInputTextType(...
完整阅读本文...]]>
接下来就开始写脚本楼
在指针剪辑 的属性栏里 把它命名为mc_mouse
然后在影片剪辑上加入脚本
onClipEvent (load)
{
xPos = 0;
yPos = 0;设置x,y坐标的初始位置
}
onClipEvent (enterFrame)
{
elastic = 0.400000;//设置弹性系数
friction = 0.700000;//设置摩擦力系数
xfriction = (xPos - _x) * elastic + xfriction * friction;
yfriction = (yPos - _y) * elastic + yfriction * friction;//设置当鼠标移动后的位置改变量
this._x = this._x + xfriction;
this._y = this._y + yfriction;//设置鼠标现在的位置
}
然后我们回到主场景 新建一个层作为脚本层
在第一针插入空白关键针 写上脚本
fscommand("fullscreen", "false");//指定 播放器为 常规菜单视图。
fscommand("allowscale", "false");//播放器以始终按 SWF
文件的原始大小绘制 SWF 文件
fscommand("showmenu", "false");
Mouse.hide();//隐藏鼠标
mc_mouse.xPos = _root._xmouse;
mc_mouse.yPos = _root._ymouse;//设置横纵坐标的位置gotoAndPlay(1);
效果预览:
在该影片剪辑上写下如下AS
onClipEvent (load)//当影片剪辑出现在时间轴上时,执行大括号里的语句 {
numY = 56;
numY = 70;;//定义图象显示的尺寸
numPerFrame = 60//定义针速
currSquare = 0;
choices = new Array();
for (i=0; i<numX*numY; i++) {
choices.push(i);//定义一个新的数组 并不断增加数组长度
}
_root.createEmptyMovieClip("mask", 0);//
this.setMask(_root.mask);//创建一个影片剪辑 作为遮照
function drawSquare(x, y) {
with (_root.mask) {
moveTo(x, y);
beginFill(0x000088);
lineTo(x+10, y);
lineTo(x+10, y+10);
lineTo(x, y+10);
endFill();//画出这个遮照, 形状为10*10象素的方块
}
}
}
onClipEvent (enterFrame)//影片剪辑针频不断触发此动作 {
if (currSquare<numX*numY) {
for (i=0; i<numPerFrame; i++) {
j = random(choices.length);
t = choices[j];
choices[j] = choices[choices.length-1];随机选择方快出现的时间
choices.pop();//开始删除数组choices中的元素
x = t%numX;
y = Math.floor(t/numX);//返回参数中表达式的下限值
drawSquare(x*10, y*10);
}
currSquare += numPerFrame;
this._alpha = currSquare/(numX*numY)*100;//设置透明度
}
}好了现在可以导出看效果了