Мяч застревает внутри весла в клоне понг (Gamemaker) - PullRequest
0 голосов
/ 13 октября 2018

В настоящее время я делаю клон Понга в Gamemaker (мой первый самостоятельный проект в Gamemaker).

Когда мяч сталкивается с веслом, я переворачиваю x_speed (меняя направление, взяв его * -1).Однако, когда мяч касается верхней или нижней части весла, мяч застревает внутри, постоянно меняя свой x_speed, но никогда не выходя из ракетки.

Мой вопрос не столько в том, чтопроблема, но есть ли практический способ обойти эту проблему?

Я пытался (но не смог) реализовать метод place_meeting, и я попробовал несколько других методов, чтобы определить, попал ли мяч в верхили в нижней части лопатки, чтобы я мог соответственно отрегулировать ее положения x и y.

Если у кого-то есть идеи (мне не обязательно нужен код для решения, просто идея, чтобы яя могу реализовать это в моей игре. Вот что я имею до сих пор.

Я пробовал другие решения, но ни одно из них даже близко не подошло, поэтому нет смысла показывать их здесь. Если вам нужны какие-либо другие фрагменты кодаиз моей программы просто спросите.

Шаг за мячом:

//Checking if it touches the borders of the play area
if (x <= 0) {
    x_speed *= -1;
    obj_score_left.gameScore += 1;
}
if (x + width >= room_width) {
    x_speed *= -1;
    obj_score_right.gameScore += 1;
}
if (y <= 0) y_speed *= -1;
if (y + height >= room_height) y_speed *= -1;

//Adds the x and y speeds to x and y
x += x_speed;
y += y_speed;

Ответы [ 2 ]

0 голосов
/ 22 декабря 2018

Было бы также полезно иметь сценарий для вашего весла, так как столкновение, вызывающее вашу проблему, здесь не показано, но я попробую широкий спектр решений, которые вы должны попробовать реализовать.

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

При столкновении:

ball.x = paddle.x+paddle.width+ball.width

Может помочь и то, что x_speed может быть только в противоположном направлении от весла.либо с помощью point_direction () или abs ()

При столкновении:

direction = point_direction(paddle.x,paddle.y,ball.x,ball.y) 
//would require using native direction and speed variables rather than x_speed and y_speed

или:

x_speed = abs(xspeed) //for the left paddle
x_speed = -abs(xspeed) //for the right paddle

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

0 голосов
/ 05 декабря 2018

Измените свои y_speed и x_speed с отрицательных на положительные и наоборот каждый раз, когда он попадает во внешнюю стену игры, делая ее отрицательной.Если вам нужно отрегулировать скорость, просто измените индивидуальную переменную.Это требует меньше кода и в целом эффективнее кода.

// Создать событие

x_speed = 20; // Whatever you want
y_speed = 20; // Whatever you want
speed = 1;

// Событие шага - проверка, касается ли оно границ игровой зоны

if (x <= 0) || (x >= room_width/*for the right side*/) {
    x_speed = -(x_speed);
} 

if (y <= 0) || (y >= room_height) y_speed = -(y_speed);

//Adds the x and y speeds to x and y
x += x_speed;
y += y_speed;
...