我在使用Ping Pong程序时遇到了麻烦,我们应该为我的java类做。我们提供文件,需要编辑。它和自动乒乓球游戏,所以它确实需要任何输入,这一切都是由计算机偶然。我只需要桨来上下。我已经把它移动了所有东西。
我的问题是Y范围从20到465.它从465减少到20,然后从20到465不再计数,它再次一直跳到465并从20倒数,从而使垫从底部到顶部消失得相当快。我打算附上这个项目,以防有人想为我查看。
我不仅仅是在找人帮我弄清楚为什么会跳起来而不是在计算。 这是代码,如果问题可以单独解决。 我正在使用edgeCheck和Update方法。
import java.awt.Point;
import javax.swing.ImageIcon;
public class CharlesPaddle extends Paddle {
/************************************************** ***************/
public CharlesPaddle(int _x) {
super(_x);
ImageIcon iiPaddle = new ImageIcon(this.getClass().getResource("paddle.png"));
paddleImage = iiPaddle.getImage();
} //end CharlesPaddle
/************************************************** ***************/
public void update() {
if (edgeCheck() == false)
do {
paddleLocation.y -= 1;
System.out.println(paddleLocation.y);
}
while (paddleLocation.y >= 21);
else if (edgeCheck() == true)
do {
paddleLocation.y += 1;
}
while (paddleLocation.y <= 465);
} //end update
/************************************************** ***************/
public void init() {
paddleLocation = new Point();
paddleVector = new Point();
paddleVector.x = 0;
paddleVector.y = speed;
paddleLocation.x = xLocation;
paddleLocation.y = 200;
} //End init
/************************************************** ***************/
public boolean edgeCheck()
{
boolean check = false;
if (paddleLocation.y >= 465)
check = false;
else if (paddleLocation.y <= 20)
check = true;
return check;
} // End edgeCheck
}
答案 0 :(得分:0)
我不仅仅是在找人帮我弄清楚为什么会跳起来而不是在计算。
好吧,无论如何我都难以弄明白。
我看到了两个选项
罪行功能(更好)
如果你的顶部是465,你的底部是20,那么你的振幅应该是(465 - 20)/ 2,或222.5。你的y-intersect应该是你的幅度加上底部,所以242.5。声明double t
,并在您的更新中执行此操作:
public void update() {
paddleLocation.y = (int)((222.5) * Math.sin(t) + (242.5))
t += Math.PI * .01; // This number is arbitrary
}
修复你的代码(我可能错过了一些东西,但试试看)
您的代码非常邋and且不直观,抱歉。但我会尽力指导你。
我认为问题是你的update
方法中有一个不必要的循环。这导致了“跳跃”。应经常调用update
方法,并且您只是在这里处理一个变量,因此您不需要循环。相反,试试这个:
import java.awt.Point;
import javax.swing.ImageIcon;
public class CharlesPaddle extends Paddle {
/************************************************** ***************/
public CharlesPaddle(int _x) {
super(_x);
ImageIcon iiPaddle = new ImageIcon(this.getClass().getResource("paddle.png"));
paddleImage = iiPaddle.getImage();
}
/************************************************** ***************/
public void update() {
goingUp = updateDirection(goingUp);
if (goingUp)
paddleLocation.y += 1;
else
paddleLocation.y -= 1;
System.out.println("y position: " + paddleLocation.y);
}
/************************************************** ***************/
public void init() {
paddleLocation = new Point();
paddleVector = new Point();
paddleVector.x = 0;
paddleVector.y = speed;
paddleLocation.x = xLocation;
paddleLocation.y = 200;
}
/************************************************** ***************/
public boolean updateDirection(boolean goingUp) // This name makes more sense
{
if (goingUp && paddleLocation.y >= 465) // It's just peaked,
return false; // so return false (going down)
else if (!goingUp && paddleLocation.y <= 20) // It's just gone to the bottom,
return true; // so return true (going up)
else // It's somewhere in between,
return goingUp; // so don't change anything!
}
}
其中任何一个都应该有用。
我重命名了你的方法和变量,因为它们没有意义。我还删除了一些冗余评论。
在main方法中,您应该使用for或while循环重复调用此update()。您也可以在更新方法中打印出paddleLocation,或者随意使用它。