1

Javascript で小さな小惑星ゲームを作成しようとしていますが、船が画面に描画されて飛び回るようになりました。ただし、一定量回転させようとすると、+/- PI/2 の間でしか回転できません。180 度以上の範囲をカバーする必要があります。そうしないと、船は方向転換できません。私はカスタム 2D ベクトル クラスを使用してゼロからこれを実行しようとしています。

これが私のベクトルコード、または少なくともコンストラクターと回転関数です。

function Vec2D(x, y) {
    var self = this;
    var sqrt = Math.sqrt;
    this.x = x !== null ? Number(x) : 0;
    this.y = y !== null ? Number(y) : 0;
}
Vec2D.prototype.rotate = function (deg) {
    var theta = deg * (Math.PI / 180),
        xTemp = this.x;
    this.x = this.x * Math.cos(theta) - this.y * Math.sin(theta); 
    this.y = xTemp * Math.sin(theta) + this.y * Math.cos(theta);
    return this;
}

そして、これが私の船が回転しようとしている場所のコードです。

function Ship(x_, y_, size_) {
    this.position = new Vec2D(x_, y_);
    this.velocity = new Vec2D(0, 0);
    this.forward = new Vec2D(0, 0);
    //some other things
    this.turningRight = false;
    this.turningLeft = false;
    this.turnAmt = 5;
    //some more things
}
Ship.prototype.update = function () {
   //other update code
   if (this.turningRight) {
        this.forward.rotate(this.turnAmt);
        console.log("right");
   }
   if (this.turningLeft) {
        this.forward.rotate(-1.0 * this.turnAmt);
        console.log("left");
   }
   //end of rotation code in update
}

必要に応じてさらに多くのコードを再現できますが、これは私が知る限り、関連するすべてのコードです。私はコンソール印刷を試み、回転行列をいじってみました。また、毎回度から変換するのではなく、ラジアンのみを使用してみました(正直なところ、とにかくやるべきです)。

私のまったくの初心者 JavaScript について何か考えはありますか?

4

0 に答える 0