作者etrexetrex (moonet)
看板Flash
标题Re: [讨论] 动画的播放
时间Thu May 8 20:18:23 2008
线上观看:
http://web.ntust.edu.tw/~B9409041/link/motion/1.html
档案下载:
http://web.ntust.edu.tw/~B9409041/link/motion/1.fla
概念部分:
用到有限状态机的概念 (本程式并未实作有限状态机)
纪录目前状态,根据目前状态判断下一步
应用部分:
范例是以属性 y 为动画的代表
事实上所有属性都可以套用,包括目前影格
这样应该可以作出几乎所有的动画了吧?
设计部分:
画面上有4个元件分别为A1、A2、A3、A4
== 原始码部分 ==
//系统变数
var speed = 0.3; //移动速度
var d = 20; //移动距离
var n = 4; //数量 (若要修改,必须增加画面上的元件)
//状态变数
var AoFlag = false; //false 表示已归位。
var AtFlag = false; //false 表示已到位。
//init
for(var i = 1 ; i <= n ; i++)
{
var A = this["A"+i];
A.i = i; //纪录i
A.T.text = i; //设定文字方块
A.oy = A._y+d; //初始值
A.ty = A._y-d; //终值
A._y = A._y+d; //归位
//设定事件
A.onPress = function()
{
//状态设定
AoFlag = true; //假设还没到原位
AtFlag = true; //假设还没到原位
//纪录传入 onEnterFrame 的变数
var thisI = this.i;
//时间轴回圈
this._parent.onEnterFrame = function()
{
//是否归位
if(AoFlag)
AoFlag = Ao();
//是否到位
else if ( AtFlag )
AtFlag = At(thisI);
else
onEnterFrame = null;
}
}
}
//回到原位
function Ao()
{
//与目标的距离
var d = 0;
//所有人回原位
for (var i = 1 ; i <= n ; i++)
{
var A = this["A"+i];
A._y += (A.oy - A._y) * speed; //向目标移动 speed 倍的距离
d += Math.abs(A.oy - A._y); //计算距离
}
//判断是否到位
if(d > 1)
return true;
else
return false;
}
//移动到定位
function At(i)
{
//与目标的距离
var d = 0;
var A = this["A"+i];
A._y += (A.ty - A._y) * speed; //向目标移动 speed 倍的距离
d += Math.abs(A.ty - A._y); //计算距离
//判断是否到位
if(d > 1)
return true;
else
return false;
}
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 122.120.113.234
※ 编辑: etrexetrex 来自: 122.120.113.234 (05/08 20:19)
1F:→ etrexetrex:忘记判断是不是按同一颗按钮了 XD 来来回回的 05/08 20:21
※ 编辑: etrexetrex 来自: 122.120.113.234 (05/08 20:26)
2F:推 lin884006:台科大的空间是不是坏了-.- 我用以前的密码登不进去 05/08 20:43
3F:→ lin884006:重设密码还要回台科~太累了-.- 05/08 20:44
4F:→ etrexetrex:囧 我不知道耶 有些人可以用有些人不能用 05/08 20:48