【发布时间】:2019-05-06 02:44:50
【问题描述】:
我正在制作一个类似于乒乓球的游戏,只是只有一个球拍并且球以弹丸运动方式移动。目标是尽可能长时间地让球在你的桨上弹跳。当我让球击中桨时,速度的 y 分量的方向的符号翻转了。这样做的问题是,当球向上移动时,重力会朝那个方向起作用,使其加速。代码如下
这是我的球类的代码,这是每秒调用 60 次的 tick 方法
public Ball(double x, double y, Game game) {
super(x,y);
this.game=game;
}
public void tick() {
time+=1.0/60.0;
if(x<=0)
xreflection=1.0;
else if(x>=Game.Width-15)
xreflection=-1.0;
if(y<=0)
yreflection=1.0;
else if(y>=Game.Height-15)
gameover=1;//different variable here as I use this to end the game if the ball hits the bottom of the screen
x+=traj.xvel()*xreflection;
y-=traj.yvel(time)*yreflection;
if(Physics.Collision(this, game.getP())) {
time=2;
System.out.println("Collision");
yreflection=-1;
}
}
这是我的球轨迹类,它处理所有的数学
public double xvel() {
double xvelo=initvel*Math.cos(Math.toRadians(theta));
return xvelo;
}
public double yvel(double time) {
double yvelo;
yvelo=initvel*Math.sin(Math.toRadians(theta))-(9.8*time);
return yvelo;
}
我尝试使用带有 y 反射的 if 语句,当 yreflection 为 1 时使 9.8 为负数,当它为 -1 时为正数。
【问题讨论】:
-
我不知道如何重写代码来做到这一点...我尝试将重力与速度计算分开添加,并在添加重力之前将速度的符号翻转到适当的方向这打破了我的碰撞检测
-
当我尝试使用弹跳球示例中的模型重写我的代码时,我的球移动得非常快,但它不起作用
-
不管我做什么这都行不通我已经尝试过调整一切
-
我只是想通了,问题是双重碰撞而不是数学。我只需要在碰撞后将球向上移动球的距离即可避免这种情况。感谢您的帮助,很抱歉打扰
-
我将 cmets 移动到带有摩擦的小 C++ 示例中
标签: java graphics physics game-development