【发布时间】:2020-12-01 23:36:04
【问题描述】:
您好,我正在用 java 制作一个需要从球碰撞到矩形的游戏。
pos.x = 球的 x 值
pos.y = 球的 y 值
vel.x = x 球的速度
vel.y = 球的 y 速度
sh = 球的高度
sw = 球的宽度
W = 矩形的宽度
H = 矩形的高度
到目前为止我有:
boolean insideRect = pos.x >= X && pos.x <= X+W && pos.y >= Y && pos.y <= Y+H;
if(insideRect){
if(pos.y + sh/2 >= H){
vel.y = (-1*vel.y)*gravity;
vel.x *= .6;
if(pos.y < Y+H/2){
pos.y = Y;
} else{
pos.y = Y+H;
}
}
if(pos.x + sw/2 > W){
vel.x = -1*vel.x;
}
}
但是,这只是说它是击中矩形的左侧还是右侧,以及击中的是顶部还是底部。
因此,如果您在 if 语句下打印,输出将是:(left, up), (right, down), (left, down), (right, up)
所以问题在于,要让它工作,我只能有一个,左、右、上或下。
如果我有两个,那么它会认为它同时撞到天花板和右侧墙壁,并且有两个视觉输出。
我该如何解决这个问题?
【问题讨论】:
-
什么是takeAway变量?您能否重命名您的 sh 和 sw 变量,使其看起来像它们所代表的那样?这将使您的代码更易于阅读。这段代码如何导致任何打印语句?
-
我建议您从一些关于在 2D 空间中移动的球的基本物理学开始。
标签: java algorithm math physics