gpt4 book ai didi

java - 基本弹球程序,球不会从墙上弹起

转载 作者:行者123 更新时间:2023-12-01 13:59:14 26 4
gpt4 key购买 nike

所以我应该编写一个程序,让球在绘图面板上弹跳 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);

}
}

}

最佳答案

在循环中不要使用:

x1 = x + dx * i  

使用

x1 = x1 + dx 

(y 相同)
因为每当 dx 要改变并乘以 -1 时,它不会从原来的位置继续到另一个方向,而是会从面板的另一侧或真正偏离的点继续。

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

关于java - 基本弹球程序,球不会从墙上弹起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19431933/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com