萬盛學電腦網

 萬盛學電腦網 >> 圖文處理 >> Flash教程 >> Flash 簡單的鼠標翻撲克動畫

Flash 簡單的鼠標翻撲克動畫

   通過本例的制作,來加強前面所學知識的理解,並學習如何配合使用達到更好效果,用簡單的方法創作很酷的三維效果,在結合創作中加深理解應用。

  本例思路:<1> 創建實例背景。

  <2> 繪制牌的正面和反面並轉換為圖形元件。

  <3> 創建一個牌的容器,轉換為元件類“Card”,將正反面牌分別放置於第1、2幀。

  <4> 創建文檔類,控制撲克牌對象的rotationY屬性。

  實例步驟:(1)新建一個空白文檔,舞台大小設置為500*250,幀頻設置為120,繪制一個與舞台大小同樣大小的矩形,並填充放射狀漸變色,設置第一色標顏色為(R:0,G:246,B:93)Alpha: 100%,設置第二色標顏色為(R:0,G:131,B:49)Alpha: 100% ,設置第三色標顏色為(R:0,G:62,B:23)Alpha: 100% ,如下圖15-1所示。

Flash 簡單的鼠標翻撲克動畫  三聯

  圖15-1 繪制背景

  (2)使用“漸變變形工具”進行調整高光位置和漸變分布模式,如下圖15-2 所示。

  圖15-2 漸變調整

  (3)分別創建兩個圖形元件,命名為“back”和“9”。簡單繪制撲克牌“9”的正反面,注冊點在中心位置且大小必需相同,如下圖15- 3所示。

  圖15-3 撲克牌正反面

  (4)新建一個影片剪輯,命名為“Card” ,命名元件類名也為“Card”,如圖3-所示。將上面步驟中創建的撲克牌“9”的正反面分別放置於第1、2幀處正中心位置,如下圖15-4所示。

  圖15-4 創建“Card”對象

  (5)創建文檔類Main類,如圖3-所示,首先創建一個牌的容器“container”,並將其放置於舞台中心位置,如構造函數第20到23行代碼所示,然後創建撲克牌容器對象並添加到容器“container”中,如第25、26行代碼所示,並將撲克牌容器對象停止播放(也就是停留在第1幀)、啟動按鈕模式和注冊偵聽器函數,如第27到29行代碼所示。

  復制代碼

  代碼如下:

  package

  {

  import flash.display.*;

  import flash.events.*;

  import caurina.transitions.Tweener;

  /**

  * ...

  * @author lbynet (Tools -> Custom Arguments...)

  */

  public class Main extends Sprite {

  private var container:Sprite;

  private var pane:MovieClip;

  private var isback:Boolean;

  private var currentPlane:MovieClip;

  private var currentRotationY:Number;

  public function Main():void {

  container = new Sprite();

  container.x=stage.stageWidth/2;

  container.y=stage.stageHeight/2;

  addChild(container);

  pane = new Card();

  container.addChild(pane);

  pane.stop();

  pane.buttonMode=true;

  pane.addEventListener(MouseEvent.CLICK, onClick);

  }

  6)當撲克牌容器對象被單擊時調用onClick偵聽器函數,為stage注冊事件偵聽來控制何時切換為正面或是反面,通過判斷變量isback 來重新設置被單擊撲克牌的rotationY屬性,如第36到44行代碼所示,在第38、42行代碼,通過Tweener 來切換撲克牌的rotationY值在0與-180度之間,如下原理圖15-5 所示。

  圖15-5 文檔類

  復制代碼

  代碼如下:

  private function onClick(event:MouseEvent):void {

  stage.addEventListener(Event.ENTER_FRAME, enterFrameHandler);

  currentPlane = MovieClip(event.currentTarget);

  if (isback) {

  Tweener.addTween(currentPlane, { rotationY:0,time:1 } );

  //Tweener.addTween(currentPlane, { z:0,time:1 } );

  } else {

  Tweener.addTween(currentPlane, { rotationY:-180,time:1 } );

  //Tweener.addTween(currentPlane, { z:-200,time:1 } );

  }

  isback = ! isback;

  }

  private function enterFrameHandler(event:Event):void {

  currentRotationY = currentPlane.rotationY;

  if (currentRotationY >= -90 && currentRotationY <= 10) {

  if (isback) {

  currentPlane.gotoAndStop(2);

  } else {

  currentPlane.gotoAndStop(1);

  }

  stage.removeEventListener(Event.ENTER_FRAME, enterFrameHandler);

  trace("已清除事件偵聽");

  }

  }

  }

  (7) 當用戶單擊撲克牌容器對象,在第34行代碼中注冊的偵聽器後,執行偵聽器函數enterFrameHandler ,並通過時時判斷撲克牌容器對象的rotationY的值來判斷撲克牌容器對象要切換跳轉到哪一幀,如第50到59行代碼所示,最後,清除無用的偵聽器,如第57行代碼所示。

  (8)把onClick偵聽器函數中第39、43兩行代碼放開,發布測試,當用戶單擊撲克牌容器對象後,撲克牌切換翻轉並放大(其實際是對象的z軸值減小),如下圖3- 所示,當再次單擊後,撲克牌切換翻轉並縮小致原始狀態。

  >>出自《Flash CS4動畫設計與制作208例》(轉載請保留出處)

copyright © 萬盛學電腦網 all rights reserved