日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

Flash CS4如何制作时尚的时钟走动动画效果

發布時間:2023/12/19 综合教程 32 生活家
生活随笔 收集整理的這篇文章主要介紹了 Flash CS4如何制作时尚的时钟走动动画效果 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  這篇教程向大家介紹Flash CS4制作時尚的時鐘走動gif動畫效果,本例主要介紹如何取得系統時間,以及如何加載外部的swf皮膚文件。

  本例思路

  .繪制出背景效果,再新建幾個fla文件用來存儲時鐘界面(必須發布swf文件),然后繪制出時鐘效果。

  . 編寫加載皮膚的管理類,然后編寫出時鐘類,再加載swf皮膚文件,創建出時鐘對象。

  Part 1 定制皮膚

  (1)新建一個500×350像素的空白文檔,然后使用“矩形工具”繪制出的斑馬條紋背景。  

  技巧與提示:

  圖所示是本例所創建的幾個.fla文件,這幾個文件專門用來存儲時鐘界面的皮膚,并且發布了swf文件,它們統一保存在skin文件夾內。  

  (2)下面只介紹一個皮膚文件的制作方法。新建一個Flash文件,并將其保存為01,再新建一個影片剪輯(名稱為Bg),然后繪制出的時鐘界面。  

  (3)新建一個“刻度”圖層,然后繪制出表盤的刻度,  

  (4)使用“橢圓工具”繪制一個只有邊框的灰色圓形,然后刪除圓形內的線條,再刪除圓形,  

  (5)將時針所在的刻度直線進行加粗顯示,然后添加時刻文字(靜態文本),  

  (6)新建一個“高光”圖層,然后繪制一個半圓形作為高光區域,再設置填充類型為“線性”,并設置第1個色標顏色為(R:255,G:255,B:255),Alpha為60%,第2個色標顏色為(R: 43,G:43,B:43),Alpha為0%,效果  

  (7)新建3個影片剪輯,分別命名為Hours、Minutes和Seconds,然后分別在對應的影片剪輯中繪制出時針、分針和秒針。  

  Part 2 輸入控制程序

  (1)切換到“庫”面板,然后分別為4個影片剪輯添加元件類,  

  技巧與提示:

  在前面步驟中只創建了4個影片剪輯元件,它們只存在于“庫”面板中,當發布成swf文件時,此時查看swf文件則為空,因為沒有編寫任何程序來進行引用和控制,就相當于該swf文件中只包含4個元件類,下面將通過加載該swf文件來引用和創建其元件類實例。

  (2)新建一個ActionScript文件,并將其保存為SkinManager,然后編寫出加載皮膚的管理類程序。

  AS3代碼

  復制代碼

  代碼如下:

  var skin_mc:SkinManager = SkinManager.getInstance();

  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("不能直接創建對象");

  }

  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));//發布事件

  }

  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;

  }

  }

  }

  技術看板:關于SkinManager類涉及到的難點

  有一定編程基礎的用戶很容易看出該類使用了很常用的“設計模式”中的單件模式,通過提供該類公有的靜態方法getInstance()作為返回唯一的實例對象,并且可以對該實例進行全局訪問。

  (3)新建一個ActionScript文件,并將其保存為Clock,下面編寫時鐘類的程序代碼。該類接收3個Sprite類型的對象參數,它們分別來自前面3個元件類所創建的實例(如第21~28行代碼),在創建實例時接收完這3個參數后,然后調用init()方法來注冊ENTER_FRAME事件,并在偵聽器函數enterFrameHandler()中創建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) {

  //將傳遞進來的三個對象參數,賦給該時鐘類的三個屬性

  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(); // 構造一個Date實例,Date 類的實例表示一個特定時間點

  hour = now.getHours(); //獲取系統當前的時,分,秒

  minute = now.getMinutes();

  second = now.getSeconds();

  //下面控制時針、分針、秒針的旋轉規律、旋轉角度 ,后面進行具體解釋

  _hours.rotation = hour*30 + Math.floor(minute*6/12);

  _minutes.rotation = minute*6 + Math.floor(second*6/60);

  _seconds.rotation = second*6;

  }

  }

  }

  技術看板:時、分、秒的算法

  小時(hours):時鐘轉動一圈是360°,總共花12個小時,每一小時為30°,為了更加接近生活中時鐘的運動效果,因此再加上時針(hour)走完一小時的角度(30°)與分針(minute)走完一小時的角度(360°),那么它們的比例關系就是1/12。

  分鐘(minutes):時鐘轉動一圈是360°,總共花60分鐘,每一分鐘是6°,再加上分針(minute)走完一分鐘的角度6°與秒針(second)走過一分鐘的角度360°,那么它們的比例關系就是1/60。

  秒鐘(seconds):時鐘轉動一圈是360°,共60秒鐘,每一秒鐘是6°。

  (4)返回到flash文檔中,然后新建一個AS圖層,并編寫出程序。通過SkinManager類來加載皮膚文件,并注冊偵聽器(如第1~3行代碼);第5~8行代碼是創建存儲時鐘組成元素的容器,并設置舞臺為居中對齊;接著創建sprite_name和class_name兩個數組,來分別存儲將要被加載swf文件中的元件類的實例名稱以及元件類名稱(如10和11行代碼);當加載完swf時鐘皮膚文件后,調用偵聽器函數completeHandler(),在偵聽器函數中執行一個for()循環語句,然后創建4個(_length值等于4)被加載swf文件中的元件類實例,并在添加實例名稱后統一添加到container_mc容器中(如第16~21行代碼)。

  AS3代碼

  復制代碼

  代碼如下:

  var skin_mc:SkinManager = SkinManager.getInstance();

  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();

  }

  //創建一個時鐘(Clock)類,傳入三個參數,參數類型都是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);

  }

  創建完被加載swf文件中的元件類實例后,調用create()方法來創建Clock類實例(如第28行代碼);getItem()方法主要是通過container_mc.getChildByName()方法來取得container_mc容器中指定名稱的對象。

  (5)除了前面的方法外,還可以通過隨機指定路徑來加載swf皮膚文件。

  AS3代碼

  復制代碼

  代碼如下:

  var skin_mc:SkinManager = SkinManager.getInstance();

  skin_mc.loadSkin("skin/0"+Math.ceil(Math.random()*4)+".swf");

  skin_mc.addEventListener("skincomplete",completeHandler);

  (6)按Ctrl+Enter組合鍵發布本例的所有程序。

  教程結束,以上就是Flash CS4制作時尚的時鐘走動gif動畫效果,希望能對大家有所幫助!

總結

以上是生活随笔為你收集整理的Flash CS4如何制作时尚的时钟走动动画效果的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。