まず、いくつかの英語の間違いをお詫びします。ポルトガル語は私の第一言語です (私はブラジル出身です)
私は 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 つの座標に到着するたびに、その座標が配列から取り出され、配列が再描画されます。
それを行うより良い方法はありますか?