2013-10-01 85 views
0

我正在做一個觸摸屏的中心連接最點遊戲我在AS3的實習,這是我的遊戲流程的快速縮影:讓線捕捉到一個點

  1. 用戶選擇一個級別。
  2. 該級別的圖像/座標加載並將圖像添加到舞臺。
  3. 當加載點的座標(XML)時,點將連接到它們的影片剪輯(circlePoint)。所有這些動畫片段都有一個唯一的值(circlePoint.id)和一個MouseEvent.MOUSE_OVER偵聽器,它會觸發clickPoint()。我的pointContainer中推動了影片剪輯。
  4. 一條直線跟隨我的鼠標,它始於第一個點。
  5. 如果我的gameCounter變量與MovieClip的id相同,則該線將捕捉到該點,並且將在我的鼠標之後開始一條新線。當然這條新線從最後一個被觸摸的點開始。

所有這一切都像一個魅力,但我面臨着一個問題;如果我的鼠標與MovieClip發生碰撞,則線將捕捉當前鼠標位置。那個位置是我的circlePoint的一角,我希望它成爲中心。所以我決定讓新的一行開始在當前點的中心。但前一行仍然在circlePoint的角落,新的一行開始在中心,它看起來不太好。我正在考慮減小我的點的大小,但點會變得太小而不能觸摸,因爲它是一個觸摸屏遊戲。這是我到目前爲止已經寫的:當所有的影片剪輯添加到舞臺

private function setStartPoint():void{ 
    mouseLines.push(new Sprite); 
    stage.addChild(mouseLines[mouseLines.length-1]); 
    holderX = pointContainer.getChildAt(0).x; 
    holderY = pointContainer.getChildAt(0).y; 
    stage.removeEventListener(MouseEvent.CLICK, setStartPoint); 
    stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseFollower); 
    stage.addEventListener(MouseEvent.CLICK, clickPoint); 
} 

setStartPoint()功能被觸發。

private function clickPoint(e:MouseEvent):void{ 
    if(gameCounter == e.target.id){ 
     holderX = e.target.x; 
     holderY = e.target.y; 
     mouseLines[mouseLines.length-1].graphics.lineTo(holderX, holderY); 
     stage.removeEventListener(MouseEvent.MOUSE_MOVE, mouseFollower); 

     gameCounter++; 
     mouseLines.push(new Sprite); 
     stage.addChild(mouseLines[mouseLines.length-1]); 
     stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseFollower); 
    } 
} 

clickPoint()被如上所述的MOUSE_OVER解僱。

private function mouseFollower(e:MouseEvent):void{ 
    mouseLines[mouseLines.length-1].graphics.clear(); 
    mouseLines[mouseLines.length-1].graphics.lineStyle(5,0x0000FF); 
    mouseLines[mouseLines.length-1].graphics.moveTo(holderX, holderY); 
    mouseLines[mouseLines.length-1].graphics.lineTo(mouseX, mouseY); 
    mouseLines[mouseLines.length-1].mouseEnabled = false; 
} 

mouseFollower()功能借鑑了MOUSE_MOVE行了。當然,mouseEnabled設置爲false,因此不可點擊。

任何幫助將不勝感激。

回答

0

我覺得你在這裏試圖做的就是在圖形程序(比如Photoshop)中繪製自由曲面。因此,我認爲你正在讓事情變得複雜。你可以讓圓的中心成爲矢量,然後在它們之間劃一條線。然後你可以很容易地說出類似的話。

private function mouseFollower(e:MouseEvent):void{ 
    if(e.Hittest){ 
    DrawLine(lastVector,curVector); 
    } 
} 

(這是僞代碼左右。)

+0

我明白你的意思。一個非僞代碼的例子將不勝感激,但我可以嘗試自己弄清楚。 –