0

我在为我的 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
}
4

1 回答 1

0

我不只是在找人来帮助我弄清楚为什么它会跳跃而不是计数。

好吧,无论如何我都很难弄清楚。

在我看来,你有两个选择

正弦函数(更好)

如果您的顶部是 465,底部是 20,那么您的振幅应该是 (465 - 20) / 2,或 222.5。你的 y 相交应该是你的振幅加上底部,所以 242.5。声明 a double t,并在您的更新中执行此操作:

public void update() {
    paddleLocation.y = (int)((222.5) * Math.sin(t) + (242.5))
    t += Math.PI * .01; // This number is arbitrary

} 

修复你的代码(我可能错过了一些东西,但试试看)

抱歉,您的代码确实草率且不直观。但我会尽力指导你。

我认为问题在于您的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,或者用它做任何你想做的事情。

于 2014-01-25T20:06:54.847 回答