【发布时间】:2014-04-08 08:33:09
【问题描述】:
从乒乓球比赛中,我得到了让球在 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 轴的顶部,这是。我正在为乒乓球比赛制作一个模组,它只包含一个桨(在底部),球必须在其他 3 面墙上反弹。
如前所述,我让它在 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;
}
【问题讨论】:
标签: android logic draw physics android-custom-view