2013-10-17 60 views
0

所以我应该制作一个程序,让球在一个绘图板周围弹跳10秒。如果击中它们,球必须从面板的两侧反弹。现在,当球击中底部面板而不是弹起时,它会出现在屏幕中间,并朝相反的方向移动,直到它碰到顶部并消失。基本弹跳球程序,球不会从墙上反弹

我敢肯定,问题是在我这部分代码... (此前的代码,我宣布X 1,Y 250,DX为1,DY 1)

//Changes dirction 
public static int newDirection1(int x, int dx, int size){ 
    if (x < 0 || x > 500 || (x + size) < 0 || (x + size) > 500) { 
    dx *= -1; 
    return dx; 
    } else { 
    return dx; 
    } 
} 

//Changes direction 
public static int newDirection2(int y, int dy, int size){ 
    if (y < 0 || y > 500 || (y + size) < 0 || (y + size) > 500) { 
    dy *= -1; 
    return dy; 
    } else { 
    return dy; 
    } 
} 

//Moves ball one step 
public static void move(Graphics g, Color color, int size, int x1, int y1, int x2, int y2){ 

    g.setColor(Color.WHITE); 
    g.fillOval(x1, y1, size, size); 
    g.setColor(color); 
    g.fillOval(x2, y2, size, size); 


} 

//Pauses for 10ms 
public static void sleep(int millis, DrawingPanel panel){ 
    panel.sleep(millis); 
} 


public static void bounceLoop(DrawingPanel panel, Graphics g, Color color, int size, int x, int dx, int y, int dy, int millis){ 

    int x1 = x + dx; 
    int x2 = x + dx; 
    int y1 = y + dy; 
    int y2 = y + dy; 

    for (int i = 0; i < 1000; i++) { 

    x1 = x + dx * i; 
    x2 = (x + dx * i) + dx; 
    y1 = y + dy * i; 
    y2 = (y + dy * i) + dy; 
    dx = newDirection1(x2, dx, size); 
    dy = newDirection2(y2, dy, size); 
    move(g, c, size, x1, y1, x2, y2); 
    sleep(millis, panel); 

    } 
    } 

} 
+0

有很多例子(例如问题13022754)(顺便说一句,你很好奇你计算dx和dy,然后移动而不刷新新坐标的值)。 – AlwaysLearning

回答

1

在循环不使用:

x1 = x + dx * i 

使用

x1 = x1 + dx 

(同为Y)
,因为每当dx发生变化,并乘以-1,而不是从原来的位置继续,并转到另一个方向,它将从面板的另一侧继续,或者是一个真正关闭的点。

此外还有一些可能会修复编码的问题:
1-您的getNewDirection不需要dx参数,只需要坐标。
2-边界条件可能会给你一个错误,给它一个肉眼无法看到的小偏移量,以避免在创建的面板外创建对象时出现错误,或者你正在使用的任何东西

+0

谢谢,球现在从墙上反弹。边界必须是0和500,但是,只要球碰到墙壁,球就会离开拱门......无论如何要在不改变边界的情况下摆脱这些边界? – user2881235

+0

就像我说的,尝试改变边界。例如,将它们设置为4和496可以解决一些错误。 尽管我必须看到代码才能理解为什么它会留下足迹 在到达边界时,它可能与循环有关,它可能会跳过一条通常会移除球的先前位置的某条线。 所以相反,我建议你清除每一次球移动的屏幕。 – ThaBomb