Некорректная работа if и switch

Есть поле объекта класса Player - isGround, всё проверил, значение меняется, но используя переменную в if, в конструкции switch - case он будто бы не обращает внимания, в чем ошибка?

void Move(Player& pl)
{
    if (_kbhit())
    {
        char a = _getche();
        switch (a)
        {
        case 'a':
            pl.point_y = pl.point_y - 1;
            break;
        case 'd':
            pl.point_y = pl.point_y + 1;
            break;
        case 's':
            pl.point_x = pl.point_x + 1;
            break;
            if (pl.isGround == true)
            {
            case ' ':
                pl.point_x = pl.point_x - pl.jumpforce;
                cout << "JUMP" << endl;
                break;
            }
        }
    }
    pl.ChangePositiont('$');
}

Ответы (2 шт):

Автор решения: Dafter

Ответ автора конечно имеет право на жизнь, однако такой код будет более корректен и читабелен в данной ситуации (по рекомендации Harry в комментариях)

void Move(Player& pl)
{
    if (_kbhit())
    {
        char a = _getche();
        switch (a)
        {
        case 'a':
            pl.point_y = pl.point_y - 1;
            break;
        case 'd':
            pl.point_y = pl.point_y + 1;
            break;
        case 's':
            pl.point_x = pl.point_x + 1;
            break;
        case ' ': 
            if (pl.isGround == true)
            {
                pl.point_x = pl.point_x - pl.jumpforce;
                cout << "JUMP" << endl;
            }
            break;
        }
    }
    pl.ChangePositiont('$');
}
→ Ссылка
Автор решения: Рудеус Грейрат

Поможет создание отдельной конструкции if ,внутри который будет находиться отдельный switch на 'пробел',некий костыль ,но всё прекрасно работает.

if (pl.isGround) 
    {
        switch (a)
        {
        case ' ':
            pl.point_x = pl.point_x - pl.jumpforce;
            cout << "JUMP" << endl;
            break;
        }
    }
→ Ссылка