私は最近XNAに入って、大好きだと言わざるを得ません。Hello Worldゲームの一種として、クラシックゲーム「Snake」を作成することにしました。90度バージョンは、非常にシンプルで実装が簡単でした。しかし、左矢印と右矢印を使用して360度回転できるバージョンを作成しようとすると、ある種の問題が発生しました。
私が今やっていることは、90度バージョンに由来します。尾から始まり、頭の直前で終わる各蛇の体の部分を反復します。これは、100ミリ秒ごとに移動するときにうまく機能します。この問題は、技術的には60 fpsではなく6 fpsでゲームが進行するため、途切れ途切れのスタイルのゲームプレイになることです。
ゲームループごとにヘビを移動したいと思います。しかし、残念なことに、ヘビは頭のサイズの速度で動くため、速度が速すぎます。これは、頭が現在の方向(32、32)ではなく、その方向に(2、2)などのはるかに小さい増分で移動する必要があることを意味します。私は学校を管理している間、このゲームに数週間取り組んできたので、これを達成する方法を考えすぎていたと思います。それはおそらく簡単な解決策です、私はそれを捕まえていません。
これは、私が理解できることに基づいて、私が試したもののいくつかの疑似コードです。それを行う別の方法を本当に考えることはできません。
for(int i = SnakeLength - 1; i > 0; i--){
current = SnakePart[i], next = SnakePart[i - 1];
current.x = next.x - (current.width * cos(next.angle));
current.y = next.y - (current.height * sin(next.angle));
current.angle = next.angle;
}
SnakeHead.x += cos(SnakeAngle) * SnakeSpeed;
SnakeHead.y += sin(SnakeAngle) * SnakeSpeed;
これにより、次のようなコードが生成されます。ご覧のとおり、各パーツは常に頭の後ろにあり、「トレイル」効果はありません。
ここで私が何をしようとしているのかを示す完璧な例は、データワームです。ビューポートの回転ではなく、三角形のトレーリング効果。
助けてくれてありがとう!