2011-06-22 55 views
0

我正在學習AS3,我試圖建立一個小小的互動,我可以在舞臺上拋出一個正方形。它只需要保持在x軸上,即可向左或向右拋出。如何創建假擲效果?

我發現了很多教程,涉及物理學。我不需要任何複雜的東西。對我來說,只要你點擊廣場並投擲一點,無論投擲動作有多難,廣場總是會被拋出舞臺,這取決於你的鼠標的方向。

我有種想法在我腦海中,「扔」的感覺可以用電影剪輯中的補間完成(因爲它只需要去左或右),這將根據方向激活鼠標。

我很抱歉,如果這是一個基本問題,我不知道如何開始。請幫忙!

回答

1

試着用這個作爲你想拋出的對象的基類。

package 
{ 
    import flash.display.Sprite; 
    import flash.events.Event; 
    import flash.events.MouseEvent; 

    public class ThrowableObject extends Sprite 
    { 
     // properties 
     public var yv:Number = 0; 
     public var xv:Number = 0; 

     private var _grabbed:Boolean = false; 
     private var _gy:int = 0; 
     private var _gx:int = 0; 

     private var ox:int = 0; 
     private var oy:int = 0; 

     /** 
     * Constructor 
     */ 
     public function ThrowableObject() 
     { 
      addEventListener(Event.ADDED_TO_STAGE, _init); 
     } 

     /** 
     * Called on dispatch of Event.ADDED_TO_STAGE 
     * @param e Event.ADDED_TO_STAGE 
     */ 
     private function _init(e:Event):void 
     { 
      addEventListener(Event.ENTER_FRAME, _handle); 
      addEventListener(MouseEvent.MOUSE_DOWN, _handleClick); 
      stage.addEventListener(MouseEvent.MOUSE_UP, _handleRelease); 
     } 

     /** 
     * Called on dispatch of Event.ENTER_FRAME 
     * @param e Event.ENTER_FRAME 
     */ 
     private function _handle(e:Event):void 
     { 
      ox = x; 
      oy = y; 

      if(_grabbed) 
      { 
       x = parent.mouseX - _gx; 
       y = parent.mouseY - _gy; 
      } 
      else 
      { 
       x += xv; 
       y += yv; 
      } 
     } 

     /** 
     * Called on dispatch of MouseEvent.MOUSE_DOWN 
     * @param e MouseEvent.MOUSE_DOWN 
     */ 
     private function _handleClick(e:MouseEvent):void 
     { 
      grabbed = true; 
      parent.addChild(this); 
     } 

     /** 
     * Called on dispatch of MouseEvent.MOUSE_UP 
     * @param e MouseEvent.MOUSE_UP 
     */ 
     private function _handleRelease(e:MouseEvent):void 
     { 
      grabbed = false; 
     } 

     /** 
     * Sets grabbed 
     * @param val Boolean representing value to set grabbed as 
     */ 
     protected function set grabbed(bool:Boolean):void 
     { 
      _grabbed = bool; 

      if(_grabbed) 
      { 
       _gx = mouseX; 
       _gy = mouseY; 
      } 
      else 
      { 
       xv = x - ox; 
       yv = y - oy; 
      } 
     } 
    } 
} 
+0

感謝馬丁,真希望我可以說,我理解這一點,但我不......,我不知道如何這兩種應用到我的項目。有沒有我可以查看的工作文件? – muudless

+0

嘿,隊友,我準備了一個包含你需要的文件的.zip和一個如何使用它們的例子。您還會在第1幀的ActionScript面板中找到關於設置基類的過程的小解釋。希望這有助於您。郵編在這裏:junk.projectavian.com?f=throwable.zip – Marty

+0

感謝哥們,你是一個拯救生命的人! – muudless