0

私は AS3 でのインターンシップのために、タッチスクリーンの点つなぎゲームを作成しています。これが私のゲーム フローの簡単な要約です。

  1. ユーザーがレベルを選択します。
  2. そのレベルの画像/座標が読み込まれ、画像がステージに追加されます。
  3. ドットの座標が読み込まれると (XML)、ドットにムービークリップ ( circlePoint) が添付されます。これらのすべての MovieClip には、一意の値 ( circlePoint.id) と、起動するMouseEvent.MOUSE_OVERリスナーがありますclickPoint()。MovieClips は my にプッシュされますpointContainer
  4. 最初のドットから始まる直線がマウスに続きます。
  5. gameCounter変数が MovieClip の と同じである場合、id線はドットにスナップし、新しい線がマウスに追従して開始されます。もちろん、この新しい行は、最後に触れたドットから始まります。

これらはすべて魔法のように機能していますが、1 つの問題に直面しています。マウスが 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()関数は、すべての MovieClip がステージに追加されるとトリガーされます。

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_MOVEmouseEnabledもちろん、false に設定されているため、クリックできません。

どんな助けでも大歓迎です。

4

1 に答える 1

0

ここであなたがやろうとしていることは、グラフィック プログラム (Photoshop など) でフリーフォームを描画することに匹敵すると思います。したがって、あなたは自分で物事を複雑にしていると思います。円の中心をベクトルにして、それらの間に線を引くことができます。それから、あなたは簡単に次のように言うことができます。

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

(これは疑似コードです。)

于 2013-10-01T13:47:48.347 に答える