4

私はトップダウンのシューティングゲームHTML5ゲームに取り組んでいます。私は現在、キャラクターの向きを変えて弾丸を発射させようとしています。

私のキャラクターは常にマウスの位置を向いています(回転します)。ですから、弾丸を発射するときは、回転を考慮する必要があります。

私はもうすぐそこにいます。唯一の問題は、実際のマウスの位置が正しい方向に移動するにもかかわらず、弾丸が開始することです。

私の計算は私の速度変数内でオフになっていると思います:

var b = new Rectangle( this.x + (this.width / 2) - 4, this.y + (this.height / 2) - 4, 8, 8);

var velocityInstance = new Vector2(0, 0);
velocityInstance.x = input.mouseX - (this.localX + this.width/2);
velocityInstance.y = input.mouseY - (this.localY + this.height/2);

var bulletInstance = new Bullet(velocityInstance, b, this.bullets.length + 1);

this.bullets.push(bulletInstance);
this.shotBullet = true;

「これ」は私のプレーヤーを指します。localX / Yは私のキャラクターの中心位置です(彼は常に画面の中央にいて、シーンは彼の周りを移動します)。

誰かが私のためにこれをチェックしてくれたら幸いです。ありがとう!

- - - 編集 - - -

これが私のBullet関数です:

Bullet = function(vel, rectangle, index){

    this.velocity = vel;
    this.rect = rectangle;
    this.index = index;

    this.Update = function(){
        this.rect.x += this.velocity.x;
        this.rect.y += this.velocity.y;

        //Collisions
        for(var c = 0; c < GameObjects.length; c++){
            if(this.rect.Intersects(GameObjects[c])){
                console.debug("Bullet Hit: " + GameObjects[c].tag);

                //Player.bullets.splice(index, 1);
            }
        }
    };

    this.Draw = function(ctx){

        this.rect.Draw(ctxMap);
    };

};
4

2 に答える 2

3

実際には、単に効率を上げるために、三角関数を使用しないことをお勧めします。Math.atan2、Math.cos、およびMath.sinは高額になる可能性があります。

あなたはすでに(少し名前を変更しました)

var deltaX = input.mouseX - (this.localX + this.width/2);
var deltaY = input.mouseY - (this.localY + this.height/2);

単純にこのようにジャンプしてみませんか?

var magnitude = Math.sqrt(deltaX * deltaX + deltaY * deltaY);
var velocityScale = bulletSpeed / magnitude;
velocityInstance.x = deltaX * velocityScale;
velocityInstance.y = deltaY * velocityScale;

機能的には同じですが、3つではなく1つのテイラー級数しか使用しないため、はるかに効率的です。速いほうがいいですよね?

于 2013-02-13T16:00:41.810 に答える
1

理解した。Math.cosとMath.sinを使用する必要がありました。

var targetX = input.mouseX - (this.localX + this.width/2);
var targetY = input.mouseY - (this.localY + this.height/2);

this.rotation = Math.atan2(targetY, targetX);

velocityInstance.x = Math.cos(this.rotation) * bulletSpeed;
velocityInstance.y = Math.sin(this.rotation) * bulletSpeed;

とにかくコミュニティに感謝します!頭を動かすのを手伝ってくれました!

于 2013-02-13T15:50:09.920 に答える