2012-07-25 41 views
0

我有6個拖放和hitTest功能的對象。很明顯,當我將一個對象拖到hitTest區域時,它是正確的。AS3:通過鼠標拖動或按鍵移動

但我的問題是,我想通過鼠標和鍵盤按鍵控制這6個對象。如果我不想拖動它們,那麼我可以通過鍵箭頭移動它們。

第二個問題是,當這兩種方式來完成,如果我想移動的鍵,然後一個對象我抓住第一個免費對象,它是不是「hitTested」

我能做這些事情在AS3?在這些項目中很奇怪的解決方案,但我需要知道是否有可能。

這裏是我的代碼拖放功能

package { 
import flash.display.Sprite; 
import flash.events.MouseEvent; 
import flash.events.KeyboardEvent; 
import flash.display.MovieClip; 

public class Main extends MovieClip 
{ 
    var xPos:int; 
    var yPos:int; 
    var errors:int; 
    var wins:int; 

    public function Main():void 
    { 
     addListeners(objectone,objecttwo,objectthree,objectfour,objectfive); 
     errors = 1; 
     wins = 1; 
    } 

    private function getPosition(target:Object):void 
    { 
     xPos = target.x; 
     yPos = target.y; 
    } 

    private function dragObject(e:MouseEvent):void 
    { 
     info.text = ""; 
     getPosition(e.target); 

     e.target.startDrag(true); 
    } 

    private function stopDragObject(e:MouseEvent):void 
    { 
     if (e.target.hitTestObject(getChildByName(e.target.name + "Target"))) 
     { 
      e.target.x = getChildByName(e.target.name + "Target").x; 
      e.target.y = getChildByName(e.target.name + "Target").y; 
      info.text = "Bingo!"; 
      wins++; 
     } 
     else 
     { 
      e.target.x = xPos; 
      e.target.y = yPos; 
      bledy.text = "Wrong: " + errors++; 

     } 
     if(errors == 4) { 
      errors = 1; 
      gotoAndPlay(2); 
     } 

     if(wins == 9) { 
      wins = 1; 
      gotoAndStop(3); 
     } 
     e.target.stopDrag(); 
    } 

    private function addListeners(... objects):void 
    { 
     for (var i:int = 0; i < objects.length; i++) 
     { 
      objects[i].addEventListener(MouseEvent.MOUSE_DOWN, dragObject); 
      objects[i].addEventListener(MouseEvent.MOUSE_UP, stopDragObject); 
     } 
    } 
} 
} 

請給我一些代碼的技巧! 乾杯!

回答

0

肯定有可能......並且肯定有幾個選項可以實現這一點。

對於鍵盤交互,我建議您檢查FocusManager類,以便學習如何使用選項卡循環選定對象,然後獲取焦點對象。 然後監聽舞臺鍵盤事件,以箭頭移動對象。

關於拖動移動檢查DragManager類相關的示例,如果使用Flex,或在flash中查找谷歌的教程。

+0

嗯,我使用純閃光燈。我不知道flex的任何事情。任何代碼提示? – Kamil 2012-07-25 09:08:47

+0

好的。您必須在要移動的對象上註冊mouseDown事件,然後監聽stage.mouseMove和stage.mouseUu。在鼠標上拖動/移動。在鼠標上完成拖動並將偵聽器移除到stage.mousemove和stage.mouseUp。 – 2012-08-02 06:41:20