Flash CS4制作時尚的時鐘走動gif動畫效果

這篇教程是向腳本之家的朋友介紹Flash CS4制作時尚的時鐘走動gif動畫效果,本例主要介紹如何取得系統(tǒng)時間,以及如何加載外部的swf皮膚文件。 我們先來看看最終的效果圖:
本例思路
.繪制出背景效果,再新建幾個fla文件用來存儲時鐘界面(必須發(fā)布swf文件),然后繪制出時鐘效果。
. 編寫加載皮膚的管理類,然后編寫出時鐘類,再加載swf皮膚文件,創(chuàng)建出時鐘對象。
Part 1 定制皮膚
(1)新建一個500×350像素的空白文檔,然后使用“矩形工具”繪制出如圖12-1所示的斑馬條紋背景。
圖12-1 繪制背景
技巧與提示:
圖12-2所示是本例所創(chuàng)建的幾個.fla文件,這幾個文件專門用來存儲時鐘界面的皮膚,并且發(fā)布了swf文件,它們統(tǒng)一保存在skin文件夾內(nèi)。
圖12-2 皮膚文件
(2)下面只介紹一個皮膚文件的制作方法。新建一個Flash文件,并將其保存為01,再新建一個影片剪輯(名稱為Bg),然后繪制出如圖12-3所示的時鐘界面。
圖12-3 繪制時鐘背景
(3)新建一個“刻度”圖層,然后繪制出表盤的刻度,如圖12-4所示。
圖12-4 繪制刻度線
(4)使用“橢圓工具”繪制一個只有邊框的灰色圓形,然后刪除圓形內(nèi)的線條,再刪除圓形,如圖12-5所示。
圖12-5 繪制刻度
(5)將時針?biāo)诘目潭戎本€進(jìn)行加粗顯示,然后添加時刻文字(靜態(tài)文本),如圖12-6所示。
圖12-6 添加文本
(6)新建一個“高光”圖層,然后繪制一個半圓形作為高光區(qū)域,再設(shè)置填充類型為“線性”,并設(shè)置第1個色標(biāo)顏色為(R:255,G:255,B:255),Alpha為60%,第2個色標(biāo)顏色為(R: 43,G:43,B:43),Alpha為0%,效果如圖12-7所示。
圖12-7 繪制高光
(7)新建3個影片剪輯,分別命名為Hours、Minutes和Seconds,然后分別在對應(yīng)的影片剪輯中繪制出如圖12-8所示時針、分針和秒針。
圖12-8 繪制表秒針
Part 2 輸入控制程序
(1)切換到“庫”面板,然后分別為4個影片剪輯添加元件類,如圖12-9所示。
圖12-9 添加元件類
技巧與提示:
在前面步驟中只創(chuàng)建了4個影片剪輯元件,它們只存在于“庫”面板中,當(dāng)發(fā)布成swf文件時,此時查看swf文件則為空,因為沒有編寫任何程序來進(jìn)行引用和控制,就相當(dāng)于該swf文件中只包含4個元件類,下面將通過加載該swf文件來引用和創(chuàng)建其元件類實例。
(2)新建一個ActionScript文件,并將其保存為SkinManager,然后編寫出加載皮膚的管理類程序。
AS3代碼
skin_mc.loadSkin("skin/01.swf");
skin_mc.addEventListener("skincomplete",completeHandler);
function completeHandler(e:Event) {
var class_name:String = "Bg";
var _class:Class = skin_mc.getClass(class_name);
var new_sprite:Sprite = new _class();
addChild(new_sprite);
}
AS3代碼
* 該類為皮膚加載管理類
* @author lbynet
* @version 0.1
*/
package {
import flash.display.Loader;
import flash.net.URLRequest;
import flash.events.Event;
import flash.events.EventDispatcher;
public class SkinManager extends EventDispatcher {
public static const SKINCOMPLETE:String="skincomplete";
private static var instance:SkinManager=new SkinManager();
public var loader:Loader;
public function SkinManager() {
if (instance != null) {
throw new Error("不能直接創(chuàng)建對象");
}
loader=new Loader();
}
public static function getInstance():SkinManager {
return instance;
}
public function loadSkin(path:String):void {
loader.load(new URLRequest(path));
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,completeHandler);
}
private function completeHandler(e:Event) {
//移除偵聽器
loader.contentLoaderInfo.removeEventListener(Event.COMPLETE,completeHandler);
dispatchEvent(new Event(SkinManager.SKINCOMPLETE));//發(fā)布事件
}
public function getClass(className:String):Class {
try {
return loader.contentLoaderInfo.applicationDomain.getDefinition(className) as Class;
} catch (e:Error) {
throw new Error(className + " definition not found in " + e.toString());
}
return null;
}
}
}
技術(shù)看板:關(guān)于SkinManager類涉及到的難點
有一定編程基礎(chǔ)的用戶很容易看出該類使用了很常用的“設(shè)計模式”中的單件模式,通過提供該類公有的靜態(tài)方法getInstance()作為返回唯一的實例對象,并且可以對該實例進(jìn)行全局訪問。
(3)新建一個ActionScript文件,并將其保存為Clock,下面編寫時鐘類的程序代碼。該類接收3個Sprite類型的對象參數(shù),它們分別來自前面3個元件類所創(chuàng)建的實例(如第21~28行代碼),在創(chuàng)建實例時接收完這3個參數(shù)后,然后調(diào)用init()方法來注冊ENTER_FRAME事件,并在偵聽器函數(shù)enterFrameHandler()中創(chuàng)建Date的實例,再取得一個特定時間點的時、分和秒值(如第35~38行代碼)。
AS3代碼
* 該類為時鐘原理類
* @author lbynet
* @version 0.1
*/
package {
import Date;
import flash.display.Sprite;
import flash.events.Event;
public class Clock extends Sprite {
private var hour:Number;
private var minute:Number;
private var second:Number;
private var _hours:Sprite;
private var _minutes:Sprite;
private var _seconds:Sprite;
public function Clock(h:Sprite,m:Sprite,s:Sprite) {
//將傳遞進(jìn)來的三個對象參數(shù),賦給該時鐘類的三個屬性
this._hours = h;
this._minutes = m;
this._seconds = s;
init();
}
private function init() {
this.addEventListener(Event.ENTER_FRAME,enterFrameHandler);
}
private function enterFrameHandler(event:Event) {
var now:Date = new Date(); // 構(gòu)造一個Date實例,Date 類的實例表示一個特定時間點
hour = now.getHours(); //獲取系統(tǒng)當(dāng)前的時,分,秒
minute = now.getMinutes();
second = now.getSeconds();
//下面控制時針、分針、秒針的旋轉(zhuǎn)規(guī)律、旋轉(zhuǎn)角度 ,后面進(jìn)行具體解釋
_hours.rotation = hour*30 + Math.floor(minute*6/12);
_minutes.rotation = minute*6 + Math.floor(second*6/60);
_seconds.rotation = second*6;
}
}
}
技術(shù)看板:時、分、秒的算法
小時(hours):時鐘轉(zhuǎn)動一圈是360°,總共花12個小時,每一小時為30°,為了更加接近生活中時鐘的運動效果,因此再加上時針(hour)走完一小時的角度(30°)與分針(minute)走完一小時的角度(360°),那么它們的比例關(guān)系就是1/12。
分鐘(minutes):時鐘轉(zhuǎn)動一圈是360°,總共花60分鐘,每一分鐘是6°,再加上分針(minute)走完一分鐘的角度6°與秒針(second)走過一分鐘的角度360°,那么它們的比例關(guān)系就是1/60。
秒鐘(seconds):時鐘轉(zhuǎn)動一圈是360°,共60秒鐘,每一秒鐘是6°。
(4)返回到flash文檔中,然后新建一個AS圖層,并編寫出程序。通過SkinManager類來加載皮膚文件,并注冊偵聽器(如第1~3行代碼);第5~8行代碼是創(chuàng)建存儲時鐘組成元素的容器,并設(shè)置舞臺為居中對齊;接著創(chuàng)建sprite_name和class_name兩個數(shù)組,來分別存儲將要被加載swf文件中的元件類的實例名稱以及元件類名稱(如10和11行代碼);當(dāng)加載完swf時鐘皮膚文件后,調(diào)用偵聽器函數(shù)completeHandler(),在偵聽器函數(shù)中執(zhí)行一個for()循環(huán)語句,然后創(chuàng)建4個(_length值等于4)被加載swf文件中的元件類實例,并在添加實例名稱后統(tǒng)一添加到container_mc容器中(如第16~21行代碼)。
AS3代碼
skin_mc.loadSkin("skin/01.swf");
skin_mc.addEventListener("skincomplete",completeHandler);
var container_mc:Sprite = new Sprite();
addChild(container_mc);
container_mc.x = stage.stageWidth/2;
container_mc.y = stage.stageHeight/2;
var sprite_name:Array = ["bg_mc","hours_mc","minutes_mc","seconds_mc"];
var class_name:Array = ["Bg","Hours","Minutes","Seconds"];
var _length:uint = class_name.length;
function completeHandler(e:Event) {
var _class:Class;
var new_sprite:Sprite;
for (var i=0; i<_length; i++) {
_class = skin_mc.getClass(class_name[i]);
new_sprite = new _class();
new_sprite.name = sprite_name[i];
container_mc.addChild(new_sprite);
}
create();
}
//創(chuàng)建一個時鐘(Clock)類,傳入三個參數(shù),參數(shù)類型都是Sprite類型,
//它們分別是舞臺上存在的三個影片剪輯元件,實例名分別為
//時針(hours_mc) , 分針(minutes_mc) , 秒針(seconds_mc)
function create() {
var a:Clock = new Clock(getItem("hours_mc"),getItem("minutes_mc"),getItem("seconds_mc"));
addChild(a);
}
function getItem(Name:String):* {
return container_mc.getChildByName(Name);
}
創(chuàng)建完被加載swf文件中的元件類實例后,調(diào)用create()方法來創(chuàng)建Clock類實例(如第28行代碼);getItem()方法主要是通過container_mc.getChildByName()方法來取得container_mc容器中指定名稱的對象。
(5)除了前面的方法外,還可以通過隨機(jī)指定路徑來加載swf皮膚文件。
AS3代碼
skin_mc.loadSkin("skin/0"+Math.ceil(Math.random()*4)+".swf");
skin_mc.addEventListener("skincomplete",completeHandler);
(6)按Ctrl+Enter組合鍵發(fā)布本例的所有程序。
教程結(jié)束,以上就是Flash CS4制作時尚的時鐘走動gif動畫效果,希望能對大家有所幫助!
相關(guān)文章
flash如何做雨滴下落的動畫效果? Flash8做一個下雨效果的技巧
flash如何做雨滴下落的動畫效果?想要做一個逼真的雨滴落下的效果,該怎么做雨滴落下水花擴(kuò)散的效果呢?下面我們就來看看Flash8做一個下雨效果的技巧2022-08-18flash理發(fā)店旋轉(zhuǎn)彩燈動畫效果怎么做? 理發(fā)店旋轉(zhuǎn)燈制作技巧
flash理發(fā)店旋轉(zhuǎn)彩燈動畫效果怎么做?經(jīng)常使用flash制作動畫效果,該怎么制作旋轉(zhuǎn)燈效果,下面我們就來看看理發(fā)店旋轉(zhuǎn)燈制作技巧,詳細(xì)請看下文介紹2022-07-23flash怎么把形狀變成文字? flash星星變文字動畫的實現(xiàn)方法
flash怎么把形狀變成文字?flash繪制的星星想要慢慢變成文字,該怎么將圖形變文字呢?下面我們就來看看flash星星變文字動畫的實現(xiàn)方法,詳細(xì)請看下文介紹2022-06-06flash怎么制作補(bǔ)間動畫? flash變形動畫的實現(xiàn)方法
flash怎么制作補(bǔ)間動畫?flash中想要制作形狀變化的動畫效果,該怎么制作補(bǔ)間動畫呢?下面我們就來就來看看flash變形動畫的實現(xiàn)方法2022-02-06FLASH怎么讓搖曳的荷花更逼著? flash制作風(fēng)吹荷花動畫的技巧
FLASH怎么讓搖曳的荷花更逼?flash中想要制作風(fēng)吹荷花的動畫熊愛國,該怎么制作這個效果呢?下面我們就來看看flash制作風(fēng)吹荷花動畫的技巧2022-02-06flash怎么制作荷花在荷花池里搖擺的動畫? FLASH做擺動荷花的技巧
flash怎么制作荷花在荷花池里搖擺的動畫??flash中想要制作荷花搖擺的動畫,該怎么制作荷花搖曳的動畫呢?下面我們就來看看FLASH做擺動荷花的技巧2022-02-06flash怎么做徑向彩虹文字動畫? 文字添加彩虹動畫效果的技巧
flash怎么做徑向彩虹文字動畫?flash椎間盤買個輸入的文字,想要添加動畫效果,該怎么添加徑向彩虹文字效果呢?下面我們就來看看flash文字添加彩虹動畫效果的技巧,詳細(xì)請2021-11-09flash怎么做眨眼動畫效果? flash動漫人物眨眼動畫的做法
flash怎么做眨眼動畫效果?flash中想要制作一個動漫人物的眼睛眨眼動畫,該怎么制作呢?下面我們就來看看flash動漫人物眨眼動畫的做法2021-11-08flash怎么制作火焰文字效果? flash做火焰字體動畫的技巧
flash怎么制作火焰文字效果?flash中想要制作一個熊熊燃燒的活顏文字,該怎么制作這個文字效果呢?下面我們就來看看flash做火焰字體動畫的技巧2021-11-01flash怎么做文字動畫logo? 閃動的片頭動畫flash的實現(xiàn)方法
flash怎么做文字動畫logo?flash中想要制作一個文字logo的動畫,讓文字閃爍,該怎么制作這個效果呢?下面我們就來看看flash制作文字動畫的技巧2021-10-29