[英]Figuring Out a Java Method in a Simple Pong Game
我指的是以下开源Android Pong游戏: https : //github.com/Grarak/Pong-Android/tree/master/app/src/main/java/com/grarak/pong
通过调试代码并查看根据屏幕上发生的情况触发的方法和条件,我可以了解所有方法及其工作方式。 但是,在整个项目中有一种方法我无法弄清其目的,尽管每当球碰到屏幕边缘时都会大量使用它。 我只是不知道为什么要这样计算,其算法的逻辑是什么。
有问题的方法名为“ getVelocityY”,它在页面底部: https : //github.com/Grarak/Pong-Android/blob/master/app/src/main/java/com/grarak/pong/ Ball.java
将不胜感激,您可以在解决这一问题上提供任何帮助。 我很乐意回答您可能遇到的任何问题,如果您希望我用简单的英语记录该项目的其他方法,以防您需要。
这是该方法的细目分类,即使对于SO而言这并不是真正合适的问题。
private double getVelocityY(Paddle paddle, float radius) {
设置5个击打框以确定球在哪个区域击中桨
Float[][] hitboxes = new Float[5][2];
for (int i = 0; i < hitboxes.length; i++) {
计算此命中框的最小和最大位置
hitboxes[i][0] = (paddle.getLength() / hitboxes.length) * i + paddle.getHeight();
hitboxes[i][1] = (paddle.getLength() / hitboxes.length) * (i + 1) + paddle.getHeight();
扩展边缘的击打框,以确保球的edgeo(具有给定的半径)仍会击中球拍。 注意:此代码可能已移出迭代。
if (i == 0) hitboxes[i][0] -= radius;
else if (i == hitboxes.length - 1) hitboxes[i][1] += radius;
}
根据球击中桨叶的位置确定速度变化。 如果到达中心,则速度不变。
for (int i = 0; i < hitboxes.length; i++) {
if (position.y > hitboxes[i][0] && position.y < hitboxes[i][1])
switch (i) {
case 0:
return -4;
case 4:
return 4;
case 1:
return -2;
case 3:
return 2;
}
}
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.