自由运动滑块和小球的碰撞检测

简介: 自由运动滑块和小球的碰撞检测

微信图片_20221013093347.png

上面是我自己画的一个示意图,这个专栏前面的文章已经能够让能个红色物块物块运动以及反弹,下面的青色滑块也能够通过硬件电路上面的按键左右移动了,彩色的砖块也有了,接下来就该写自由运动滑块和小球的碰撞检测了。

SIGNAL X1,Y1,X2,Y2,X3,Y3,X4,Y4:STD_LOGIC_VECTOR(0 to 9);
SIGNAL X_shudu,Y_shudu:STD_LOGIC_VECTOR(0 to 9);
SIGNAL X11,Y11,X21,Y21,X31,Y31,X41,Y41:STD_LOGIC_VECTOR(0 to 9);
--底部滑块位置初始化
X1<=20;Y1<=400;X2<=20;Y2<=460;
X3<=50;Y3<=400;X4<=50;Y4<=460;
--自由移动的那个滑块位置的初始化
X11<=255;Y11<=420;X21<=255;Y21<=430;
X31<=270;Y31<=420;X41<=270;Y41<=430;
X_shudu<=10;Y_shudu<=10;

上面这几行代码,初始化了滑块四个点(X1,Y1),(X2,Y2),(X3,Y3),(X4,Y4)

以及自由运动物体四个点(X11,Y11),(X21,Y21),(X31,Y31),(X41,Y41)的坐标

微信图片_20221013094436.png

我们实验用的显示屏大小是640*480的。

这个碰撞检测其实特别简单(如下图所示)就是这三种情况:微信图片_20221013094533.png

我们用代码把这三种情况给写出来就行了:

情况一:若(X41,Y41),(X21,Y21)和(X1,Y1)的位置关系为,X41>X1,Y41>=Y1,X21<X1,Y21>=Y1,就让运动物体的Y方向速度反向就行了,即:

PROCESS(X11,Y11,X21,Y21,X31,Y31,X41,Y41) BEGIN
--自由物体移动方向右上的代码,水平和竖直方向的移动速度都是shudu个像素
X11<=X11+X_shudu;
Y11<=Y11+Y_shudu;
X21<=X21+X_shudu;
Y21<=Y21+Y_shudu;
X31<=X31+X_shudu;
Y31<=Y31+Y_shudu;
X41<=X41+X_shudu;
Y41<=Y41+Y_shudu;
IF(X41>X1 AND (Y41>Y1 OR Y41==Y1) AND X21<X1 AND (Y21>Y1 OR Y21==Y1 )) THEN --情况一的位置关系
Y_shudu=!Y_shudu;--Y速度反向
X11<=X11+X_shudu;
Y11<=Y11+Y_shudu;
X21<=X21+X_shudu;
Y21<=Y21+Y_shudu;
X31<=X31+X_shudu;
Y31<=Y31+Y_shudu;
X41<=X41+X_shudu;
Y41<=Y41+Y_shudu;
END
END PROCESS;

情况二:若(X41,Y41),(X21,Y21)和(X1,Y1),(X3,Y3)的位置关系为,X41<X3,Y41>=Y1,X21>X1,Y21>=Y1,让运动物体的Y方向速度反向就行了,即:

PROCESS(X11,Y11,X21,Y21,X31,Y31,X41,Y41) BEGIN
--自由物体移动方向右上的代码,水平和竖直方向的移动速度都是shudu个像素
X11<=X11+X_shudu;
Y11<=Y11+Y_shudu;
X21<=X21+X_shudu;
Y21<=Y21+Y_shudu;
X31<=X31+X_shudu;
Y31<=Y31+Y_shudu;
X41<=X41+X_shudu;
Y41<=Y41+Y_shudu;
IF(X41<X3 AND( Y41>Y1 OR Y41==Y1) AND X21>X1 AND (Y21>Y1 OR Y21==Y1)) THEN --情况二的位置关系
Y_shudu=!Y_shudu;--Y速度反向
X11<=X11+X_shudu;
Y11<=Y11+Y_shudu;
X21<=X21+X_shudu;
Y21<=Y21+Y_shudu;
X31<=X31+X_shudu;
Y31<=Y31+Y_shudu;
X41<=X41+X_shudu;
Y41<=Y41+Y_shudu;
END
END PROCESS;

情况三:若(X41,Y41),(X21,Y21)和(X1,Y1),(X3,Y3)的位置关系为X21>X3,X41>X3,Y21>=Y3,Y41>=Y3,也让运动物体的Y方向速度反向就行了,即

PROCESS(X11,Y11,X21,Y21,X31,Y31,X41,Y41) BEGIN
--自由物体移动方向右上的代码,水平和竖直方向的移动速度都是shudu个像素
X11<=X11+X_shudu;
Y11<=Y11+Y_shudu;
X21<=X21+X_shudu;
Y21<=Y21+Y_shudu;
X31<=X31+X_shudu;
Y31<=Y31+Y_shudu;
X41<=X41+X_shudu;
Y41<=Y41+Y_shudu;
IF(X21>X3 AND X41>X3 AND (Y21>Y3 OR Y21==Y3)AND (Y41>Y3 OR Y41==Y3)) THEN --情况二的位置关系
Y_shudu=!Y_shudu;--Y速度反向
X11<=X11+X_shudu;
Y11<=Y11+Y_shudu;
X21<=X21+X_shudu;
Y21<=Y21+Y_shudu;
X31<=X31+X_shudu;
Y31<=Y31+Y_shudu;
X41<=X41+X_shudu;
Y41<=Y41+Y_shudu;
END
END PROCESS;

就先这样吧,上课去了。在写一个砖块消失的代码就结束了,感觉我写的有啥不对以及意见都可以提,谢谢,感觉帮助到了你就点个关注呗。



相关文章
|
4月前
|
前端开发 计算机视觉 Python
OpenCV中绘制运动的小球动画,
要在OpenCV中绘制运动的小球动画,并且将动画显示在Python GUI窗口内,可以按照以下步骤进行:
50 2
|
4月前
|
计算机视觉 Python
OpenCV中绘制文字和运动的小球动画
要在OpenCV中绘制文字和运动的小球动画,可以使用以下方法: 1. 导入所需库:
73 8
|
4月前
|
前端开发
HTML+CSS实现弹跳球效果
HTML+CSS实现弹跳球效果
|
5月前
颜色拾取器
颜色拾取器
24 0
|
8月前
|
编译器 Windows
<1>[QTCN]颜色拾取器
桌面置顶 获取全局鼠标坐标和颜色(Web值、RGB) 新增: 按下鼠标右键停止/开启
55 1
|
10月前
|
移动开发 前端开发 HTML5
前端|3D立体视频翻转动画
前端|3D立体视频翻转动画
166 0
|
11月前
|
开发工具
如何做一个俄罗斯方块4:形状碰撞检测(上)
在游戏开发中,我们所说的“碰撞”经常指的是物理碰撞,什么是物理碰撞呢?一般的在游戏开发工具中都会包含一个叫做“物理引擎”的东西,它的作用就是在游戏中模拟出现实中的物理效果。例如,我们扔一个东西,这个东西会因为重力而下落,最终落到地上,与地面发生碰撞。在游戏中,我们可以借助物理引擎,来模拟出东西下落掉到地面上的效果。当东西掉到地面上时,我们就说这个东西与地面发生了碰撞。
274 0
|
11月前
如何做一个俄罗斯方块5:形状碰撞检测(下)
其实,两侧的碰撞判断跟我们上一节讲过的向下移动的碰撞判断原理是一样的,向下碰撞检测的是每一个方块下方的位置是否有其它方块,那么向左/右碰撞检测的就是每个方块左/右侧的位置是否有其他的方块。
278 0
|
前端开发 JavaScript
使用html+css+JavaScript制作抛物线小球
使用html+css+JavaScript制作抛物线小球
86 0

热门文章

最新文章