actionscript 3 - 对象速度问题

actionscript 3 - issues with object speed

所以我刚刚得到了一个系统,其中一个物体从一个移动物体发射到另一个物体。

我现在遇到的问题是它当前计算的方式使子弹移动得更慢,这是基于它最初发射时被射击的物体与另一个物体之间的距离。

视频讲解。

我希望子弹停留的速度:http://gyazo.com/3682d9adde0ed08aa675702d190c0d46.mp4

物体靠近时的速度: http://gyazo.com/553b0fb82d89a84f206ea00a9dc8daf0.mp4

这是从黄色物体发射子弹的所有计算代码:

private function createBullet(): void {
        _pcos = Math.cos((this.rotation) * Math.PI / 180);
        _psin = Math.sin((this.rotation) * Math.PI / 180);
        _startX = this.x - _barrelLength * _pcos;
        _startY = this.y - _barrelLength * _psin;
        _endX = Init._player.x + 1 * _pcos + Math.random() * _bulletSpread -           _bulletSpread * .5;
        _endY = Init._player.y + 1 * _psin + Math.random() * _bulletSpread - _bulletSpread * .5;
        var tempBullet: MovieClip = new Bullet();
        tempBullet.vx = (_endX - _startX);
        tempBullet.vy = (_endY - _startY);
        tempBullet.x = _startX;
        tempBullet.y = _startY;
        tempBullet.rotation = -(Math.atan2(Init._player.x - this.x, Init._player.y - this.y)) * 180 / Math.PI;
        tempBullet.maxDistance = _maxDistance;
        _bullets.push(tempBullet);
        stage.addChild(tempBullet);
    }

    public function updateBullets(): void {
        var i: int;
        var tempBullet: MovieClip;
        for (i = 0; i < _bullets.length; i++) {
            tempBullet = _bullets[i];
            tempBullet.x += tempBullet.vx / _bulletSpeed;
            tempBullet.y += tempBullet.vy / _bulletSpeed;
            }
        }
    }

如果有人可以帮助计算,我们将不胜感激。

你想让你的子弹考虑射击物体的速度吗?如果是,请将 original 设置为 1,否则设置为 0。

    private static const original=1;
    private function createBullet(): void {
        _pcos = Math.cos((this.rotation) * Math.PI / 180);
        _psin = Math.sin((this.rotation) * Math.PI / 180);
        _startX = this.x - _barrelLength * _pcos;
        _startY = this.y - _barrelLength * _psin;
        _endX = Init._player.x + 1 * _pcos + Math.random() * _bulletSpread -               _bulletSpread * .5;
        _endY = Init._player.y + 1 * _psin + Math.random() * _bulletSpread - _bulletSpread * .5;
        var tempBullet: MovieClip = new Bullet();
        var activeAngle:Number=Math.atan2(_endY-_startY,_endX-_startX);
        tempBullet.vx = _bulletSpeed*Math.cos(activeAngle)+original*this.vx;
        tempBullet.vy = _bulletSpeed*Math.sin(activeAngle)+original*this.vy;
        tempBullet.x = _startX;
        tempBullet.y = _startY;
        tempBullet.rotation = -(Math.atan2(Init._player.x - this.x, Init._player.y - this.y)) * 180 / Math.PI;
        tempBullet.maxDistance = _maxDistance;
        _bullets.push(tempBullet);
        stage.addChild(tempBullet);
    }

    public function updateBullets(): void {
        var i: int;
        var tempBullet: MovieClip;
        for (i = 0; i < _bullets.length; i++) {
            tempBullet = _bullets[i];
            tempBullet.x += tempBullet.vx;
            tempBullet.y += tempBullet.vy;
        }
    }
}

请注意,_bulletSpeed 以每帧像素数而非每秒像素数为单位进行测量,并且假定为静态。该代码未经测试,请确保加号和减号已正确设置为您的角度系统。