Java 两个形状之间的碰撞
我正在制作一个关于处理的动画。Java 两个形状之间的碰撞,java,processing,Java,Processing,我正在制作一个关于处理的动画。 但是,我对下面的代码有一个问题: 所以,你可以在输出上看到,球在窗户上到处移动。我想为球设置一个障碍物。球可以从中间传球,但是如果它击中了线,它会以(int)random(1,3)的速度去某处 怎么做? 下面是我想要实现的一张图片:一种方法是在球穿过中间时检查碰撞,特别是当球的速度将y从height/2时 大概是这样的: if (((y < height/2 && y+dirY > height/2) || (y > height
但是,我对下面的代码有一个问题: 所以,你可以在输出上看到,球在窗户上到处移动。我想为球设置一个障碍物。球可以从
中间传球
,但是如果它击中了线,它会以(int)random(1,3)
的速度去某处
怎么做?下面是我想要实现的一张图片:一种方法是在球穿过中间时检查碰撞,特别是当球的速度将y从
if (((y < height/2 && y+dirY > height/2) || (y > height/2 && y+dirY < height/2)) && (x < width/2-middle || x > width/2+middle)){
dirY = (int) random (1,3);
dirX = (int) random (1,3);
}
if((yheight/2)| |(y>height/2&&y+dirYwidth/2+middle)){
dirY=(int)随机(1,3);
dirX=(int)随机(1,3);
}
(一个更合适的解决方案是在球的边缘通过障碍物时创建碰撞,但我将由您决定)这样做的一种方法是在球穿过中间时检查碰撞,特别是当球的速度将y从
if (((y < height/2 && y+dirY > height/2) || (y > height/2 && y+dirY < height/2)) && (x < width/2-middle || x > width/2+middle)){
dirY = (int) random (1,3);
dirX = (int) random (1,3);
}
if((yheight/2)| |(y>height/2&&y+dirYwidth/2+middle)){
dirY=(int)随机(1,3);
dirX=(int)随机(1,3);
}
(一个更合适的解决方案是在球的边缘通过障碍物时创建碰撞,但我将由您决定)我不打算编写代码,但我会告诉您如何计算,这并不难 画一个圆,我们知道圆心和半径 我们知道起点和终点
中心到起点或终点的距离小于半径,则该线与圆相交(例如点在圆内)
起点
X在中心的左侧(sX终点
X在右侧(eX>cX),且其Y与中心
Y之间的距离小于半径
(cY-sY请注意,这只适用于水平线的简单情况。例如,通常更好的方法是使用矢量计算来确定从中心到直线的距离。这将允许您处理对角线等问题。我不打算编写代码,但我会告诉您如何计算它,这并不难 画一个圆,我们知道圆心和半径 我们知道起点和终点
中心到起点或终点的距离小于半径,则该线与圆相交(例如点在圆内)
起点
X在中心的左侧(sX终点
X在右侧(eX>cX),且其Y与中心
Y之间的距离小于半径
(cY-sY请注意,这只适用于水平线的简单情况。例如,通常更好的方法是使用矢量计算来确定从中心到直线的距离。这将允许您使用对角线等。对于您的玩具模型,处理碰撞的最简单方法是考虑碰撞区域。所以
intdirx=(int)随机(1,3);
int-dirY=(int)随机(1,3);
//int x=20,y=20;
int-middle=20;
intx=(int)随机(20180);
int y=(int)随机(20,80);
int-x1,x2,y1,y2;
无效设置(){
规模(200200);
//碰撞区界限
x1=(宽度/2-中间)+20/2-1;//89
x2=(宽度/2+中间)-20/2+1;//111
y1=高度/2-20/2+1;//91
y2=高度/2+20/2-1;//109
}
作废提款(){
背景(255);
椭圆(x,y,20,20);
线(0,高度/2,宽度/2-中间,高度/2);/(0,100,80,100)
线条(宽度/2+中间,高度/2,宽度,高度/2);/(120100200100)
x+=dirX;
y+=dirY;
如果(x>宽度| | x<0)
dirX*=-1;
如果(y>高度| | y<0)
dirY*=-1;
if((xy1&&y0)| |//左上角向下
(x高度/2&&yx2&&y>y1&&y0)|///右上角向下
(x>x2&&y>height/2&&y
对于一个更复杂的模型,你可以考虑更复杂的情况,例如,由于线的末端、球的轮廓与线的碰撞等等。对于你的玩具模型来说,处理碰撞的最简单的方法是考虑碰撞区域。所以