1

このコードについて助けが必要です。atmで作っているゲームはトップダウンの2Dゲームです。私のキャラクターはすでに移動して弾丸を撃つことができます。私が直面している問題は、カーソルの方向に向かって弾丸を発射することです。

私はすでにそれを行っていますが、問題は、複数の弾丸を発射すると、すべての弾丸が方向を変えてカーソルに向かうことです。私が行う必要があると考えているのは、すべての弾丸に特定のパスを割り当てる必要があるため、別の弾丸を撃っても変更されません。弾丸はすでにオブジェクトなので、何が間違っているのかわかりません。

Bullet.prototype.draw = function() {
    this.drawX += (mouseX - this.drawX) * 0.01 ;
    this.drawY += (mouseY - this.drawY) * 0.01 ;
    ctxbullet.drawImage(imgSprite, this.srcX, this.srcY, 
        this.width, this.height, this.drawX, this.drawY, 10, 8);
};

ご覧のとおり、すべての Bullet はここでのルールとロジックに従います。

もう 1 つの問題は、弾丸が一定の速度で進まないことです。

どうもありがとう。

4

1 に答える 1

0

その関数で使用しているmouseXプロパティとmouseYプロパティは、他の場所で定義されているようです。つまり、この関数の外部で変数が更新されると、drawXとdrawYの更新に使用している数値も変更されます。

あなたがする必要があるのは、作成時にmouseXとmouseYのローカルコピーを追跡することです。コードの残りの部分がどのように見えるかはわかりませんが、推測します。

function Bullet(x, y) {
    this.srcX = x;
    this.srcY = y;
    // keep track of original mouse coordinates
    this.mouseX = mouseX;
    this.mouseY = mouseY;
}

Bullet.prototype.draw = function() {
    this.drawX += (this.mouseX - this.drawX) * 0.01;
    this.drawY += (this.mouseY - this.drawY) * 0.01;
    ctxbullet.drawImage(
        imgSprite,
        this.srcX,  this.srcY,
        this.width, this.height,
        this.drawX, this.drawY,
        10, 8
    );
};

これにより、弾丸が作成されたときに常にマウス座標に向かって移動するようになりますが、すぐに別の問題が発生します。速度はそれらのマウス座標からの弾丸の距離に相対的であるため(これが一貫性のない速度を経験している理由です)、弾丸はマウス座標で停止するまで遅くなります。

あなたがする必要があるのは、srcポイントからマウスポイントまでのベクトルを希望の速度で作成することです。これにより、弾丸は無限大のベクトルに従うことができます(ただし、実際には無限大ではなく、範囲外になったら削除することをお勧めします)。

function Bullet(x, y) {
    var dX = mouseX - x,
        dY = mouseY - y,
        dist = Math.sqrt(dX * dX + dY * dY)
    ;
    // we want our deltas to be proportions of the total distance
    this.dX = dX / dist;
    this.dY = dY / dist;
    this.speed = 5; // arbitrary number
}

Bullet.prototype.draw = function() {
    // I didn't test this, but I think it works
    this.drawX += this.dX * this.speed;
    this.drawY += this.dY * this.speed;
    ctxbullet.drawImage(
        imgSprite,
        this.srcX,  this.srcY,
        this.width, this.height,
        this.drawX, this.drawY,
        10, 8
    );
}
于 2013-01-19T22:26:47.330 に答える