私は学校のプロジェクトのためにレーシングゲームに取り組んでいます。Visual Studio 10 Pro、およびIrrlichtを使用します。文法が悪いのでごめんなさい>。>、そして私の最初の質問なので、それが正しく行われたかどうかはわかりません。
私がそれを機能させたいのは、トラック上のさまざまなポイントでウェイポイントを作成し、ウェイポイントチェックを実行して、車が次のウェイポイントを通過しているかどうかを確認することです(次に通過する必要がある場合)。次のウェイポイントを更新しますが、それ以外は何も更新しません。
これが機能することを期待する方法は、nからn + 1までのベクトルを作成し、nで最初のベクトルに垂直なベクトルを見つけることです。次に、オブジェクトがそのベクトルの前にあるか後ろにあるかを確認します。この機能を作成するのに役立つGamedev.netフォーラム投稿を見つけました。
void Engine::checkWaypoint(Vehicle* vehicle)
{
btVector3 vector = waypoints[vehicle->nextWaypoint];
// n
btVector3 nextVector = waypoints[vehicle->nextWaypoint + 1];
// n+1
vector = nextVector - vector;
// First vector
btVector3 pos = btVector3(vehicle->position.X,vehicle->position.Y,vehicle->position.Z);
float product = vector.dot(pos - waypoints[vehicle->nextWaypoint]);
// positiv = before, negative = behind
if(product < 0)
vehicle->nextWaypoint += 1;
}
これに関する現在のバグは次のとおりです。
新しいポイントを通過せずに、次のウェイポイントを更新します。
終了してリセットすると、最初のウェイポイントでのトリガーが停止します。
だから私の質問:
これはこれを行うための良い方法ですか?
私はそれを正しくしましたか?