Эта проблема намного проще, чем вы ее делаете.Вам вообще не нужно беспокоиться об углах, просто подумайте об этом с точки зрения компонентов.Когда мяч ударяется о что-то по вертикальной стороне, x-составляющая его скорости переворачивается.Когда мяч ударяется о что-то на горизонтальной стороне, y-компонент его скорости переворачивается.
Например, псевдокод для вашей обработки столкновений может выглядеть примерно так:
if (hits on left or right side of brick)
ball.velocity.x = -ball.velocity.x;
else if (hits on top or bottom side of brick)
ball.velocity.y = -ball.velocity.y;
endif
Из вашегопредоставленный код, я не могу точно сказать, есть ли у вас какие-то компоненты скорости, подобные этой.Чтобы представить вашу скорость, вы должны либо иметь угол и величину, либо компонент x и y.Если вы выбрали первый вариант при разработке своей игры, я настоятельно рекомендую переключиться на компоненты, потому что это значительно упрощает все математические операции, потому что в конечном итоге вы все равно конвертируете все в компоненты.
Обратите внимание, чтоэтот ответ предполагает, что вы подпрыгиваете только горизонтально или вертикально.