Как я могу заставить Камень падать, когда игрок сталкивается со спусковым крючком НИЖЕ камня? - PullRequest
0 голосов
/ 12 ноября 2018
protected override void Update(GameTime gameTime)
{
    int dt = gameTime.ElapsedGameTime.Milliseconds;
    base.Update(gameTime);

    player.storedPos = player.position;
    Vector3 storedAcc = acceleration;
    acceleration = new Vector3(0, 0, 0);

    if (Keyboard.GetState().IsKeyDown(Keys.Left)) player.rotation.Y += 0.1f;
    if (Keyboard.GetState().IsKeyDown(Keys.Right)) player.rotation.Y -= 0.1f;

    player.velocity *= 0.9f; // friction

    if (Keyboard.GetState().IsKeyDown(Keys.Up))
    {
       acceleration.X = (float)Math.Sin(player.rotation.Y) * 0.001f;
       acceleration.Z = (float)Math.Cos(player.rotation.Y) * 0.001f;
    }

    // camera follow
    gamecam.position = new Vector3(50, 50, 50) + player.position;
    gamecam.target = player.position;

    MovePlayer(dt);

    foreach (basicCuboid WallSegment in walls)
    {
        if (player.hitBox.Intersects(WallSegment.collisionbox))
        {
            ElasticCollision(WallSegment);
        }
    }
    if (player.hitBox.Intersects(door.collisionbox))
    {
        ElasticCollision(door);
    }

    if (player.hitBox.Intersects(TriggerBoxRockFall) && !rockFalling)
    {
        rockFalling = true;
        rock.velocity = new Vector3(0, 0.2f, 0);
    }

    if (rockFalling)
    {
        Vector3 gravity = new Vector3(0, -0.01f, 0);
    }

Итак, этот код у меня есть, но я не уверен, как заставить камень упасть.Что мне не хватает или я что-то набрал неправильно?Мне нужно, чтобы камень упал на игрока, сталкивающегося с полем триггера под камнем.

1 Ответ

0 голосов
/ 19 января 2019

Неясно из предоставленного кода, но вы хотите, чтобы код для player.hitBox.Intersects (TriggerBoxRockFall) срабатывал только тогда, когда вы находитесь под ним.

Изменить код:

if (player.hitBox.Intersects(TriggerBoxRockFall) && !rockFalling)
{
    rockFalling = true;
    rock.velocity = new Vector3(0, 0.2f, 0);
}

до:

if (player.Velocity.Y < 0 && player.hitBox.Intersects(TriggerBoxRockFall) && !rockFalling)
{
    rockFalling = true;
    rock.velocity = new Vector3(0, 0.2f, 0);
}

Как примечание: переместите как можно больше кода из Game1. Гравитация скалы должна быть сделана в Скале, а не в Game1.

например:

if (player.Velocity.Y < 0 && player.hitBox.Intersects(TriggerBoxRockFall) && !rockFalling)
{
    rockFalling = true;
    rock.velocity = new Vector3(0, 0.2f, 0);
    rock.GravityApplies = true;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...