0

私は大学のユニットの一部としてゲームを作っていますが、AS3を初めて使用するため、それを行うための最良の方法がわかりません。私はパーティーにそれぞれ異なる8人のゲストがいて、性格、趣味、興味が異なります。ゲームはこのように機能します。ゲストをクリックしてステージ上の任意の場所をクリックすると、そのゲストはそれに向かって移動します。ゲストをクリックしてから別のゲストをクリックすると、最初にクリックしたゲストが2番目にクリックしたゲストに向かって移動し、ゲストが近づくと互いに話し合います。

8人のゲスト全員が、移動に関して同じ機能とコードを共有します。クリックアンドムーブの部分は完了しましたが、Guest01クラスで実行されましたが、すべてのゲストが同じようになります。ゲストごとに8つの異なるクラスを作成する必要がありますか、それとも配列を使用して作成する必要があります。私は本当にこれを始める方法を知りません。以下は、クリックして移動するためのコードです。

package 
{
    import flash.display.MovieClip;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.filters.*;

    public class Guest01 extends MovieClip
    {
        var walkSpeed:Number = 5;
        var oldPosX;
        var oldPosY;

        var myGlow:GlowFilter = new GlowFilter();

        public function Guest01()
        {
            addEventListener(MouseEvent.MOUSE_OVER, addGlow);
        }

        public function addGlow(event:MouseEvent):void
        {
            filters = [myGlow];
            addEventListener(MouseEvent.MOUSE_OUT, removeGlow);
            addEventListener(MouseEvent.CLICK, ready);

        }

        function removeGlow(event:MouseEvent):void
        {
            filters = [];
        }

        public function ready(event:MouseEvent):void
        {
            filters = [myGlow];
            stage.addEventListener(MouseEvent.MOUSE_DOWN, walk);
            removeEventListener(MouseEvent.MOUSE_OUT, removeGlow);
        }

        function walk(event:MouseEvent):void
        {
            oldPosX = parent.mouseX;
            oldPosY = parent.mouseY;
            rotation = Math.atan2(oldPosY - y,oldPosX - x) / Math.PI * 180;
            filters = [];
            stage.removeEventListener(MouseEvent.MOUSE_DOWN, walk);
            stage.addEventListener(Event.ENTER_FRAME, loop);
        }

        function loop(event:Event):void
        {
            var dx:Number = oldPosX - x;
            var dy:Number = oldPosY - y;
            var distance:Number = Math.sqrt((dx*dx)+(dy*dy));
            if (distance<walkSpeed)
            {
                // if you are near the target, snap to it
                x = oldPosX;
                y = oldPosY;
                removeEventListener(Event.ENTER_FRAME, loop);

            }
            else
            {
                x = x+Math.cos(rotation/180*Math.PI)*walkSpeed;
                y = y+Math.sin(rotation/180*Math.PI)*walkSpeed;
            }

        }
    }
}
4

2 に答える 2

1

クリック アンド ムーブの部分は完了しましたが、それは Guest01 クラスで行われましたが、すべてのゲストは同じようになります。ゲストごとに 8 つの異なるクラスを作成する必要がありますか、それとも配列を使用して作成する必要がありますか。

8 つの異なるゲストに対して 8 つの異なるクラスを作成するべきではありませんが、異なるゲストに対してクラスとメソッドを再利用するようにしてください。

私はパーティーに 8 人のゲストを招待し、それぞれが異なる性格、趣味、興味を持っています。

ゲストクラスを1 つ作成し、すべてのプロパティ (性格、趣味など) をクラスの変数として保持します。ゲストが選択した (またはランダムな) プロファイルに基づいて、最初に異なるゲストのクラスを初期化する必要があります。また、Guest のすべてのメソッド (walk、glow など) は、クラス自体のメソッドになります。

方向性を示すのに役立つことを願っています。

于 2012-12-29T01:45:04.217 に答える
0

別の投稿からあなたの質問に答えようとしました。ユーザーをある場所から別の場所に移動する、ユーザーが別のユーザーに移動したい場合に移動する必要があるオフセット位置を計算する、ユーザーの趣味や興味を表示するための要素の位置を計算するなど、ゲームを単純なアクションに分解する必要があります。など。

オブジェクト指向言語でプログラミングしたことはありますか? ゲームの構築などのプロジェクトに取り組む前に、しっかりと把握しておく必要がある基本事項がいくつかあります。前回の投稿に基づいて、次の焦点は次のメソッドになるはずです。

ユーザーのクリックに基づいてプレーヤーを再配置する関数を既に作成しているため、次の関数を作成する必要があります。

  1. clickToMove() 関数内 (またはあなたがそれを呼んだもの)。if テストを作成して、再配置クリックが空の場所またはユーザーがいる場所を選択するかどうかを確認します。ユーザーが存在する場合、移動するプレーヤーの位置をオフセットするための別のメソッドを記述する必要があります。そうしないと、プレーヤーが互いに重なり合ってレイヤー化されます。

私は今飛行機に乗っています。すぐにまた投稿します

于 2012-12-30T01:42:13.953 に答える