修复乒乓程序的Y轴移动

时间:2014-01-25 19:48:27

标签: java pong

我在使用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
}

1 个答案:

答案 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,或者随意使用它。