Это не так, как это упростит.

аю понг, и мне действительно трудно написать алгоритм, который правильно отскакивает мяч от четырех стенок (я буду иметь дело с забиванием мячей позже, потому что только часть с запада + восточная сторона будет целями). Поэтому сейчас я хочу, чтобы мяч отскочил от штрафной.

Легко определить, попал ли мяч в стену, но у меня возникли проблемы с вычислением нового угла.

Это то, что я придумал до сих пор:

        if(dstY == 0) {
            // North wall
            if(angle < 90) {
                newAngle = angle + 90;
            } else {
                newAngle = angle - 90;
            }
        } else if(dstX == maxWidth) {
            // East wall
            if(angle < 90) {
                newAngle = angle + 270;
            } else {
                newAngle = angle + 90;
            }
        } else if(dstY == maxHeight) {
            // South wall
            newAngle = angle + 90;
        } else if(dstX == 1) {
            // West wall
            if(angle < 270) {
                newAngle = angle - 90;
            } else {
                newAngle = angle - 270;
            }
        }

Это работает только для примерно половины столкновений и выглядит действительно безобразно. Я уверен, что это должно быть действительно просто и что это было сделано много раз прежде.

В моем коде dstX / dstY - это координаты назначения X / Y. X = 0 и y = 0 вверху слева.

Ответы на вопрос(0)

Ваш ответ на вопрос