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

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

微信图片_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;

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



相关文章
|
存储 vr&ar 图形学
法线贴图的视线原理
使用法线贴图可以大大提高渲染效果,使低多边形数的模型看起来具有高多边形数模型的细节和真实感。在游戏开发、电影制作和虚拟现实等领域,法线贴图被广泛应用于增强场景和物体的视觉效果。
158 2
|
2月前
|
开发者
ThreeJs实现小球自由落体效果
这篇文章详细介绍了如何在Three.js中利用物理引擎Cannon.js实现小球自由落体效果,包括物理世界的创建、物体的添加及同步物理状态到三维场景中的具体实现。
51 3
ThreeJs实现小球自由落体效果
|
2月前
|
JavaScript
ThreeJs通过DragControls实现物体拖动
这篇文章详细讲解了如何在Three.js中使用DragControls实现3D物体的鼠标拖动功能。
111 1
ThreeJs通过DragControls实现物体拖动
|
4月前
|
开发框架
threejs做特效:实现物体的发光效果-EffectComposer详解!
【8月更文挑战第7天】实现物体的发光效果-EffectComposer详解!
486 6
threejs做特效:实现物体的发光效果-EffectComposer详解!
|
6月前
|
图形学
【unity小技巧】实现FPS武器的瞄准放大效果(UGUI实现反向遮罩,全屏遮挡,局部镂空效果)
【unity小技巧】实现FPS武器的瞄准放大效果(UGUI实现反向遮罩,全屏遮挡,局部镂空效果)
94 1
|
7月前
|
前端开发 计算机视觉 Python
OpenCV中绘制运动的小球动画,
要在OpenCV中绘制运动的小球动画,并且将动画显示在Python GUI窗口内,可以按照以下步骤进行:
115 2
|
计算机视觉 Python
OpenCV中绘制文字和运动的小球动画
要在OpenCV中绘制文字和运动的小球动画,可以使用以下方法: 1. 导入所需库:
143 8
【Three.js入门】灯光与阴影、平行光阴影属性、聚光灯的属性和应用
【Three.js入门】灯光与阴影、平行光阴影属性、聚光灯的属性和应用
344 1
|
前端开发 JavaScript
使用html+css+JavaScript制作抛物线小球
使用html+css+JavaScript制作抛物线小球
159 0
|
前端开发 JavaScript 内存技术
css动画animation绘制向四周扩散的圆圈
css动画animation绘制向四周扩散的圆圈
1429 0