Как рассчитать необходимый вектор скорости, чтобы стрелка попала в определенную точку / - PullRequest
0 голосов
/ 16 января 2020

Я использую Oimo. js Библиотека физики с 3 js.

Я стреляю своей стрелой в цель, но моя математика, кажется, не права, и мне трудно вспомнить, как именно все формулы kinemati c работают.

У меня есть функция атаки, которая создает снаряд и запускает его с помощью трехмерного вектора. Но это не вело себя так, как я думал, и закончило тем, что нуждалось в жестком кодировании любого значения, которое на самом деле тоже не работает. Может ли кто-нибудь указать мне правильное направление? Я также хочу, чтобы стрелка имела небольшое ar c на своей траектории.

 public attack( target: Unit, isPlayer: boolean ): void {
        let collisionGroup = isPlayer ? CollisionGroup.PLAYER_PROJECTILES : CollisionGroup.ENEMY_PROJECTILES;
        let collidesWithGroup = isPlayer ? CollidesWith.PLAYER_PROJECTILES : CollidesWith.ENEMY_PROJECTILES;

        this.model.lookAt( target.position );
        let direction: Vector3 = new Vector3( 0, 0, 0 );
        direction = this.model.getWorldDirection( direction );

        let value = this.calculateVelocity();
        let velocity = new Vector3( direction.x * value, Math.sin( _Math.degToRad( 30 ) ) * value, direction.z * value );

        let arrow = this.gameWorld.addProjectile( 'arrow3d', 'box', false, new Vector3( this.model.position.x, 5, this.model.position.z ), new Vector3( 0, 0, 0 ), false, collisionGroup, collidesWithGroup );
        arrow.scale = new Vector3( 10, 10, 5 );
        arrow.setVelocity( velocity );

        this.playAnimation( 'attack', false );
    }
    protected calculateVelocity(): number {
        return Math.sqrt( -2 * ( -9.8 / 60 ) * this.distanceToTarget );
    }

Я делю на 60 из-за oimo. js timestep.

...