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

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

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

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



相关文章
|
人工智能 JavaScript 前端开发
CodeBuddy重构开发:程序员的懒人进化论
本书讲述了2025年一位程序员与CodeBuddy的邂逅,开启编程新时代的故事。Craft智能体实现对话式编程,大幅缩短开发周期;MCP协议打通工具链,提升全链路效率;DeepSeek V3深度理解业务并传承编码风格。在AI辅助下,开发者从工匠转型为指挥家,技术债管理更加高效。书中指出,未来编程大师是善用AI的人,CodeBuddy成为放大人类编程理想的棱镜,展现代码优雅与智慧无限可能。
641 10
【计算巢】网络拓扑结构的比较分析:星形、环形与总线型
【5月更文挑战第31天】本文介绍了网络的三种常见拓扑结构:星形、环形和总线型。星形拓扑易于管理和维护,信息传递高效;环形拓扑结构简单,信息环状传递,但环中断可能导致网络瘫痪;总线型成本低、扩展易,但总线故障会全局影响。理解其特点有助于根据需求选择合适的网络结构。
1564 1
|
存储 测试技术 项目管理
【北京大学 软件工程】三、软件需求
本文介绍了软件需求工程的基础概念和流程。首先定义了需求及其获取,强调需求是描述系统功能、性能等方面的要求,并需具备必要性、无歧义性、可测性、可跟踪性和可测量性五大基本性质。接着阐述了需求的分类,包括功能、性能、外部接口、设计约束和质量属性五类,并详细说明了各类需求的具体内容及示例。此外,还探讨了需求发现的技术,并分析了每种技术的应用场景与优缺点。最后,文章解释了需求规约(SRS)的概念、格式和作用,指出它是软件开发组织与用户之间的技术合同,用于指导项目管理、产品设计、测试计划和用户手册的编写。需求规约不应包含设计细节或项目规划信息,而是专注于明确系统的功能性与非功能性要求。
1215 1
【北京大学 软件工程】三、软件需求
|
12月前
|
机器学习/深度学习 人工智能 自然语言处理
从0搭建AI智能客服教程(AI智能客服系统选型和实战指南)
针对智能客服技术与业务脱节的痛点,合力亿捷通过 NLP、知识图谱及人机协同策略,助企业实现首次解决率超 70%、人力成本降 43%、年省成本超千万。其方案提升制造业问题解决率 40%,投诉转接成功率达 99%,以分场景选型助力超万家企业平衡业务与成本,成行业首选。
|
自然语言处理 监控 程序员
本地部署企业级自适应 RAG 应用的方法与实践
本文介绍了本地部署企业级自适应RAG(Adaptive Retrieval-Augmented Generation)应用的方法与实践。RAG结合信息检索与文本生成,广泛应用于问答、编程等领域。自适应RAG通过分类器评估查询复杂度,动态选择无检索、单步检索或多步检索策略,优化生成结果。其特点在于灵活性和适应性,能够根据输入情况调整检索和生成策略。核心技术包括检索策略的自适应、生成策略的自适应以及模型参数的自适应调整。通过实战,深入了解了RAG的工作原理和应用场景,并获得了宝贵经验。
2030 4
|
机器学习/深度学习 数据采集 算法
Python基于OpenCV和卷积神经网络CNN进行车牌号码识别项目实战
Python基于OpenCV和卷积神经网络CNN进行车牌号码识别项目实战
|
安全 应用服务中间件 网络安全
检查一个网站是否启用了HTTPS
检查一个网站是否启用了HTTPS
3684 6
|
vr&ar 图形学 API
Unity与VR控制器交互全解:从基础配置到力反馈应用,多角度提升虚拟现实游戏的真实感与沉浸体验大揭秘
【8月更文挑战第31天】虚拟现实(VR)技术迅猛发展,Unity作为主流游戏开发引擎,支持多种VR硬件并提供丰富的API,尤其在VR控制器交互设计上具备高度灵活性。本文详细介绍了如何在Unity中配置VR支持、设置控制器、实现按钮交互及力反馈,结合碰撞检测和物理引擎提升真实感,助力开发者创造沉浸式体验。
1240 1
|
存储 JSON 资源调度
vue3怎么使用i18n
vue3怎么使用i18n
1029 5
|
存储 缓存 中间件
中间件Cache-Aside(旁路缓存)策略中间件Cache-Aside(旁路缓存)策略
【5月更文挑战第7天】Cache-Aside策略是一种灵活且有效的缓存策略,可以根据应用程序的需求进行定制和优化。
899 7
中间件Cache-Aside(旁路缓存)策略中间件Cache-Aside(旁路缓存)策略