球卡在乒乓球克隆游戏机的球拍中

时间:2018-10-13 03:20:14

标签: game-maker pong gml game-maker-language

我目前正在游戏玩家中制作Pong克隆游戏(这是我在游戏玩家中的第一个独立项目)。

当球与球拍碰撞时,我将x_speed颠倒(通过抓住* -1来颠倒方向)。但是,当球碰到球拍的顶部或底部时,球会卡在内部,不断改变其x_speed,但永远不会脱离球拍。

我的问题不只是问题所在,而是有解决该问题的实用方法吗?

我尝试了(但失败了)实现place_meeting方法,并且尝试了几种其他方法来检测球是否击中了桨的顶部或底部,以便我可以调整其xy的位置。

如果有人有想法(我不一定需要解决方案的代码,只需想法就可以在游戏中实现它。到目前为止,这就是我的想法。

我尝试了其他解决方案,但是没有一个解决方案,因此在这里没有显示它们。如果您需要我程序中的其他代码片段,请询问。

控球:

//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 :(得分:0)

每次y_speedx_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;

答案 1 :(得分:0)

也有用于桨的脚本的有用之处,因为这里没有显示引起问题的碰撞,但是我将尝试应尝试实现的广泛解决方案。

无论您遇到什么情况,都应该大有帮助的第一步是在球碰撞时将球从球拍以正确的距离推入,因为球无论如何都不应该在球内。像这样

发生碰撞时:

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

通过使用point_direction()或abs(),可以确保x_speed只能与桨叶方向相反,这可能会有所帮助

发生碰撞时:

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

我不建议您进一步了解您的实际代码。