0

船が回転してあらゆる方向に発射できるスペース シューティング ゲームを作ろうとしています。今、三角法の基本は知っていますが、この時点で立ち往生していて、脳が凍っているように見えるので、助けを求めます。

私はShip.asTurret.asを持っています。すべての船にはいくつかの砲塔が含まれています。これは、プレイヤーの入力と Ship.as にある各砲塔の弾丸を作成する役割を担うループです。

for (var i:int = 0; i < turrets.length; i++)
            {
                var _pcos:Number = Math.cos(angle / 180 * Math.PI);
                var _psin:Number = Math.sin(angle / 180 * Math.PI);
                var bulletX:Number = center.x + turrets[i].distance * _pcos;
                var bulletY:Number = center.y + turrets[i].distance * _psin;

                var bullet:BulletBase = new bulletClass(bulletX, bulletY, angle);
                layerBullets.add(bullet);

                bullets.push(bullet);
            }

variable centerは船のスプライトの正確な中心に配置されたポイント、angleは船のマウス方向への回転、turret.distanceは中心から砲塔までの距離です。

これがTurret.asで起こっていることです

public class Turret extends Point
{
    private var ship:Ship;
    public var distance:Number;
    public var angle:Number;
    /**
     *
     * @param   x position with angle 0
     * @param   y position with angle 0
     * @param   distance distance from center of ship to turret
     */
    public function Turret(x:Number = 0, y:Number = 0, ship:Ship = null)
    {
        super(x, y);
        this.ship = ship;
        this.x = x;
        this.y = y;
        var dx:Number = ship.center.x - x;
        var dy:Number = ship.center.y - y;

        angle = Math.atan2(dy, dx);

        distance = Math.sqrt(dx * dx + dy * dy);
    }

さて、このコードで起こっていることは、弾丸が同じ方向から発射されたように見えるということです。弾丸は 1 つしか後ろにありません。

私は数学の専門家ではありません。誰かが答えを知っていれば、本当に感謝しています。

4

1 に答える 1

0
var _pcos:Number = Math.cos((turret.angle + angle) / 180 * Math.PI);
var _psin:Number = Math.sin((turret.angle + angle) / 180 * Math.PI);

角度は船の角度

于 2013-09-05T19:39:32.897 に答える