0

まず、いくつかの英語の間違いをお詫びします。ポルトガル語は私の第一言語です (私はブラジル出身です)

私は AS3 で宇宙ゲームをゼロから作ろうとしていますが、船を動かす方法はゲームの Air Traffic Chief のようです。

私はある時点で成功します。しかし、船が非常に速いときは揺れ始め、思ったほど滑らかできれいではありません。

これが私がやったことです:http://megaswf.com/s/2437744

コードが非常に大きいので、pastebin に貼り付けました: pastebin.com/1YVZ23WX 英語のドキュメントもいくつか書きました。

これは私の最初のゲームであり、ここでの最初の投稿です。皆さんが私を助けてくれることを本当に願っています。

前もって感謝します。

編集:コードが非常に大きいので、ここで明確にしようとします。

ユーザーが MouseDown および MouseMove すると、すべての座標が配列に渡されます。ユーザーが MouseUP すると、この配列は配列を修正する関数に渡されます。

例: 2 つの座標間の距離が 5px より大きい場合、関数は 2 つの座標の中間に座標を作成します。

この機能を問題から外せば、解決されると思われます。ただし、ユーザーがマウスを非常にゆっくり動かすと、それでも発生します。また、その機能で解決しようとしていた問題も発生します。船が 1 つの座標に到着すると、2 つの座標の距離が非常に大きくなるため、ライン パスのほとんどが消えます。

配列を修正する機能を削除したバージョンをアップロードしました。http://megaswf.com/s/2437775

この問題を解決するには2つの方法があると思います

1-座標の配列のノイズを修正してみてください 2-2点間の座標を作成する機能を外して、線のパスが消える問題を修正してみてください。

重要な機能は次の 2 つです。

この関数は船を動かします

    private function mover():void 
    {
        if (caminhoCoords[0]!=null) // caminhoCoords is the array that contain the path
        {

            var angulo:Number = Math.atan2(this.y - caminhoCoords[0][1], this.x - caminhoCoords[0][0]);
            this.rotation = angulo / (Math.PI / 180);
            this.x = this.x - velocidade * (Math.cos(angulo)); 
            this.y = this.y - velocidade * (Math.sin(angulo));

            var testex:Number = Math.abs(this.x - caminhoCoords[0][0]); //test to see the distance between the ship and the position in the array
            var testey:Number = Math.abs(this.y - caminhoCoords[0][1]);



            if (testey<=velocidade+2 && testex<=velocidade+2) // if is velocidade+2 close then go to the next coordnate
            {
                caminhoCoords.shift();
            }   
        }
    }

この関数は線を引きます:

    private function desenhaCaminho():void //draw the black Path
    {
        if(caminhoCoords.length>=1) 
        {
            caminho.graphics.clear();
            caminho.graphics.lineStyle(1, 0x000000, 1,true);
            caminho.graphics.moveTo(caminhoCoords[0][0],caminhoCoords[0][1]);
            for (var i:int = 1; i < caminhoCoords.length; i++)
            {
                caminho.graphics.lineTo(caminhoCoords[i][0], caminhoCoords[i][1]);
            }
        }else 
        {
            caminho.graphics.clear();
        }
    }

船が 1 つの座標に到着するたびに、その座標が配列から取り出され、配列が再描画されます。

それを行うより良い方法はありますか?

4

2 に答える 2

0

吃音の見た目から判断すると、「線」をかなり滑らかにする必要があると思います。それはおそらくラインで多くのノイズを拾い上げており、それが飛行機の回転に変換されています. 平面の回転/位置、または線自体を滑らかにします。

于 2012-05-28T09:42:39.530 に答える