在乒乓球比赛中,我已经弄明白让球在X轴的墙壁上反弹。这就是实现这一目标的逻辑:
主要方法:
protected void handleBounces(float px, float py) {
/*Rebound on X-axis*/
if(mBall.x <= Ball.RADIUS || mBall.x >= getWidth() - Ball.RADIUS) {
mBall.bounceWall();
if(mBall.x == Ball.RADIUS)
mBall.x++;
else
mBall.x--;
}
}
球逻辑:
public void bounceWall() {
setAngle(3 * Math.PI - mAngle);
}
public void setAngle(double angle) {
mAngle = angle % (2 * Math.PI);
mAngle = boundAngle(mAngle);
findVector();
}
protected double boundAngle(double angle) {
return boundAngle(angle, angle >= Math.PI);
}
protected void findVector() {
vx = (float) (speed * Math.cos(mAngle));
vy = (float) (speed * Math.sin(mAngle));
}
现在,我需要做同样的事情,但对于Y轴的顶部,这是。我正在为乒乓球比赛制作一个mod,它只包含一个球拍(在底部),球必须在另外三个球上反弹。
如上所述,我让它在X轴墙壁上反弹,但我现在需要让它在屏幕的顶部反弹(Y轴顶部)。
我尝试了几种方法,但球没有反弹。我认为,通过这样的实现,它应该可行,但不起作用,球继续并消失在顶部:
主要方法:
protected void handleTopFastBounce(float px, float py) {
if(mBall.goingUp() == false) return;
if(mBall.y <= Ball.RADIUS) {
mBall.bounceWall();
playSound(mWallSFX);
if (mBall.y == Ball.RADIUS) {
mBall.y++;
}
}
}
球逻辑:与上述方法相同,但添加此方法:
public boolean goingUp() {
return mAngle >= Math.PI;
}
答案 0 :(得分:0)
最后我解决了自己的问题:
只需制作此mods:
主要方法:
protected void handleTopFastBounce() {
if(mBall.goingUp() == false) return;
if(mBall.y <= Ball.RADIUS) {
mBall.bounceTop();
mBall.y++;
}
}
Ball logic:创建一个修改bounceWall()方法的新方法:
public void bounceTop() {
setAngle(4 * Math.PI - mAngle);
}