Re: [討論] 動畫的播放

看板Flash作者 (moonet)時間17年前 (2008/05/08 20:18), 編輯推噓1(103)
留言4則, 2人參與, 最新討論串2/2 (看更多)
線上觀看: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)

05/08 20:21, , 1F
忘記判斷是不是按同一顆按鈕了 XD 來來回回的
05/08 20:21, 1F
※ 編輯: etrexetrex 來自: 122.120.113.234 (05/08 20:26)

05/08 20:43, , 2F
台科大的空間是不是壞了-.- 我用以前的密碼登不進去
05/08 20:43, 2F

05/08 20:44, , 3F
重設密碼還要回台科~太累了-.-
05/08 20:44, 3F

05/08 20:48, , 4F
囧 我不知道耶 有些人可以用有些人不能用
05/08 20:48, 4F
文章代碼(AID): #188k-Ifv (Flash)
文章代碼(AID): #188k-Ifv (Flash)