Некорректная работа 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;
}
}