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 について何か考えはありますか?