- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在代码中添加一个方法,逐一检查球的四个边缘,检查该边缘是否与窗口边缘发生碰撞。如果是这样,它应该相应地改变方向。例如,如果球向东北 (↗) 移动并且顶部边缘撞击屏幕顶部,它会将方向更改为东南 (↘),以便球看起来从边缘反弹。 (请记住,如果球沿对角线方向直接进入角落,则两个边缘可能会同时击中,使其沿相反的对角线方向直接弹回。)
我不知道如何获得椭圆形的四个边。我已经完成了其他 4 个方向(上、下、左、右),但不知道如何处理窗口的角落。
public void move()
{
//direction right
if(dir == 1)
{
int x = ball.getX();
int y = ball.getY();
ball.setLocation(x + 1,y);
if(x>425)
{
dir = 2;
}
}
//direction left
if(dir == 2)
{
int x = ball.getX();
int y = ball.getY();
ball.setLocation(x - 1,y);
if(x<0)
{
dir = 1;
}
}
//direction down
if(dir == 3)
{
int x = ball.getX();
int y = ball.getY();
ball.setLocation(x,y + 1);
if(y>425)
{
dir = 4;
}
}
//direction up
if(dir == 4)
{
int x = ball.getX();
int y = ball.getY();
ball.setLocation(x ,y - 1);
if(y<0)
{
dir = 3;
}
}
//direction bottom right corner
if(dir == 5)
{
int x = ball.getX();
int y = ball.getY();
ball.setLocation(x + 1,y + 1);
}
//direction upper right corner
if(dir == 6)
{
int x = ball.getX();
int y = ball.getY();
ball.setLocation(x + 1,y - 1);
}
//direction bottom left corner
if(dir == 7)
{
int x = ball.getX();
int y = ball.getY();
ball.setLocation(x - 1,y + 1);
}
//direction upper left corner
if(dir == 8)
{
int x = ball.getX();
int y = ball.getY();
ball.setLocation(x - 1,y - 1);
}
}
最后,请确保每次移动球时都调用此方法。这样,当您将球沿当前方向移动 1 个像素后,您可以运行该方法来检查它是否击中了任何边缘,并更改方向。此时,您的球应该在屏幕上移动并弹跳。
最佳答案
不要想太多它是椭圆形。就本作业而言,它可能只是一个盒子。角点的情况与边缘的情况相比,唯一的区别是您需要区分 4 个结果:
此外,说明特别建议您将运动逻辑与改变方向的逻辑分开。在您最初的方法中,您同时执行这两项操作。
在我的示例中,我引入了一个方法 changeDirection()
,该方法仅检查是否触及任何边界,然后让您掉头,但没有发生实际移动。您仍然需要实现 move() 并处理它,但您可以调用此方法并假设球随后朝着正确的方向前进。
此外,一旦引入命名常量来引用说明,代码就会变得更容易理解:
private static final int RIGHT = 1;
private static final int LEFT = 2;
private static final int DOWN = 3;
private static final int UP = 4;
private static final int DOWN_RIGHT = 5;
private static final int UP_RIGHT = 6;
private static final int DOWN_LEFT = 7;
private static final int UP_LEFT = 8;
private static final int WIDTH = 425;
private static final int HEIGHT = 425;
public void changeDirection()
{
int x = ball.getX();
int y = ball.getY();
switch ( dir )
{
case RIGHT:
if ( x >= WIDTH )
{
dir = LEFT;
}
break;
case LEFT:
if ( x <= 0 )
{
dir = RIGHT;
}
break;
case DOWN:
if ( y >= HEIGHT )
{
dir = UP;
}
break;
case UP:
if ( y <= 0 )
{
dir = DOWN;
}
break;
case DOWN_RIGHT:
if ( y >= HEIGHT )
{
if ( x >= WIDTH )
{
dir = UP_LEFT;
}
else
{
dir = UP_RIGHT;
}
}
else if ( x >= WIDTH )
{
dir = DOWN_LEFT;
}
break;
case UP_RIGHT:
if ( y <= 0 )
{
if ( x >= WIDTH )
{
dir = DOWN_LEFT;
}
else
{
dir = DOWN_RIGHT;
}
}
else if ( x >= WIDTH )
{
dir = UP_LEFT;
}
break;
case DOWN_LEFT:
if ( y >= HEIGHT )
{
if ( x <= 0 )
{
dir = UP_RIGHT;
}
else
{
dir = UP_LEFT;
}
}
else if ( x <= 0 )
{
dir = DOWN_RIGHT;
}
break;
case UP_LEFT:
if ( y <= 0 )
{
if ( x <= 0 )
{
dir = DOWN_RIGHT;
}
else
{
dir = UP_LEFT;
}
}
else if ( x <= 0 )
{
dir = UP_RIGHT;
}
break;
}
}
关于java - 逐一检查球的四个边是否与墙壁相撞的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58598156/
我想改善碰撞系统。 现在,我检测2个不规则对象的边界矩形是否碰撞。 我想获得for矩形的相应椭圆,而另一个则使用圆形。我找到了一种获取椭圆坐标的方法,但是当我尝试检测椭圆是否与圆相交时遇到了问题。 您
我想在 GWT 中为我的 FlexTable 定义一组 CSS 规则。我为奇数和偶数的所有组合定义了 4 种不同的规则。 .myTable tbody tr:nth-child\(odd\) td:n
我是一名优秀的程序员,十分优秀!