Заставьте объект отскочить в зависимости от угла и скорости
Что я хочу сделать, так это отразить объект от весла и заставить его реагировать также на скорость весла.
Так что, как и в старых играх с вылетом, чем быстрее вы двигаете весло, тем тупее угол.
Что я имею до сих пор, так это;
var playerPos = player.pos.x - paddle.pos.x;
var relativePos = Math.floor(player.pos.x - this.pos.x + (player.size.x / 2));
var angle = relativePos * (Math.PI / paddle.size.x);
var newVel = Math.cos(angle);
player.vel.x = newVel;
Моя математика не та, что была раньше.
редактировать
Игрок - это объект, обладающий такими свойствами, как size.x и size.y, pos.x и pos.y, speed.x и speed.y. Этот объект имеет идентичные свойства и является веслом.
игрок мяч, если хотите.
таким образом, вы перемещаете весло, и его положение в измерении y установлено, и вы перемещаете его в x.
1 ответ
Вы не упомянули об этом в своем посте, но я предполагаю, что вы не хотите изменять скорость, если она не достигла весла, поэтому давайте создадим функцию if, которая упаковывает весь наш изменяющий скорость код:
if(paddle.x + paddle.size > player.x && player.x + player.size > paddle.s){
//Code to be ran to change velocity
}
Это работает, только если игрок находится внизу. Если вы хотите просто выйти из середины плеера, а не по краям, запустите этот код:
if(paddle.x + paddle.size > player.x + (player.size/2) && player.x + (player.size/2) > paddle.x){
//Code to be ran to change velocity
}
Теперь, когда мы знаем, что игрок действительно ударил по веслу, давайте отрегулируем скорость так, чтобы он ударил по веслу. Вы можете сделать это разными способами (и, пожалуйста, скажите мне, если вы хотите по-другому), но я бы сделал это, создав скорость, основанную на положении, когда он достигал весла, и добавил к нему текущую скорость. Я собираюсь иметь диапазон от -5
в 5
,
player.vel.x += (player.x + (player.size/2) - paddle.x + (paddle.size/2)) /
(paddle.size/2) * 5;
Первая строка вычисляет, где находится положение игрока по отношению к веслу, а вторая строка устанавливает соотношение между -1
а также 1
и умножает это на 5
, Все это добавляется к текущей скорости. Переменная 5
должен быть изменен по вашему вкусу.
Последнее, что нужно сделать, это настроить скорость вращения лопасти. Это должно быть действительно легко, если вы не хотите, чтобы весло оказывало меньшее или большее влияние на общую скорость.
player.vel.x += paddle.vel.x;
Довольно простой код - это все, что вам действительно нужно.
Итак, чтобы сложить все вместе:
if(paddle.x + paddle.size > player.x + (player.size/2) && player.x + (player.size/2) > paddle.x){
player.vel.x += (player.x + (player.size/2) - paddle.x + (paddle.size/2)) /
(paddle.size/2) * 5 + paddle.vel.x;
}
Очень простой код и не требуется тригонометрия. (ура!)
Если вы хотите, чтобы это изменилось, я могу помочь, потому что я действительно очень хорошо знаю математику, я просто хотел упростить ее, потому что я не уверен, действительно ли она должна быть более продвинутой.