迪文科技论坛

 找回密码
 立即注册
搜索
查看: 5|回复: 0

【分享】基于迪文串口屏制作的rpj对象交互和碰撞原型

[复制链接]

1

主题

0

回帖

24

积分

新手上路

Rank: 1

积分
24
发表于 昨天 23:45 | 显示全部楼层 |阅读模式
一、作品介绍
本项目基于迪文DGUS串口屏与T5L C51单片机,设计并实现了一个可实机运行的RPG风格交互原型。系统采用“屏幕负责显示与触摸,单片机负责游戏规则”的分层设计,在800×480分辨率的屏幕上,实现了角色选择、地图探索、碰撞检测、场景切换、物体交互以及动态对话框等完整功能。
为了高效制作地图,项目还配套开发了一款可视化的地图编辑器,可直接在游戏地图上绘制可走区域、障碍物、交互点和出口,大大降低了开发中的调试成本。
二、设计思路
1. 功能实现
  • 角色与场景:启动后可选择不同角色,进入对应的初始地图进行探索。
  • 移动与碰撞:通过屏幕上的虚拟方向键控制角色移动。系统会实时检测角色位置,在碰到障碍物时阻止移动,在进入交互区域时给出提示。
  • 场景交互:当角色处于特定物体前时,按下“交互”键可弹出对应的对话框,再次按下对话框会平滑隐藏,实现类似RPG游戏的物件调查功能。
  • 地图切换:角色行走到地图边缘的“出口”区域时,会自动切换至下一张地图,并更新出生位置,实现多地图间的无缝漫游。
  • 辅助工具:开发了基于Python的地图区域编辑器,支持可视化地在地图上框选并导出碰撞数据,替代了繁琐的手写坐标工作。

2. 技术实现
  • 分层架构:DGUS屏幕仅作为“显示终端”和“输入终端”,负责呈现画面、按钮动画和对话框,并将触摸输入写入特定内存;C51单片机则作为“逻辑核心”,轮询输入、执行移动、碰撞、切换地图等游戏规则,并将角色坐标、状态写回内存,由屏幕实时反映。
  • 碰撞检测机制:所有判定均基于角色“脚部中点”进行。移动时,系统会先检查脚点是否落在预设的“可走区域”内,再排除“阻挡区域”。针对很薄的出口,系统会检测角色移动线段是否与出口区域相交,有效避免了“一步跨过出口”的问题。
  • 全局交互系统:采用一套全局的superACT对话框图标表,所有地图页面共享同一套图标编号。这从根源上解决了早期因不同地图页面图标库索引不同,导致“调查相机却弹出茶杯对话框”的混乱问题。
  • 输入保护与状态机:为防止长按方向键导致切图后角色自动移动,设计了“输入保护”机制,在场景切换后主动等待所有按键释放,再重新接收输入。

三、工作原理
1. 系统启动与主界面
程序启动后,显示主菜单。通过触摸屏检测“开始冒险”指令,进入角色选择界面。玩家点击不同角色,系统将变量数据写入内存,单片机据此确定初始地图。
2. 游戏主循环工作流程
  • 输入轮询:单片机进入主循环后,会不断读取屏幕方向键和交互键对应的内存地址。
  • 状态判定与执行:

    • 移动请求:若检测到方向键按下,则根据当前方向计算新的坐标。
    • 出口优先检查:首先检查新旧坐标的连线是否经过“出口”区域。若是,则执行地图切换,保存新地图的出生点,并重置所有状态。
    • 碰撞检测:若未触发出口,则检查新坐标的“脚部中点”是否在“可走区域”内且不在“阻挡区域”内。判定通过,则更新角色坐标。
    • 交互更新:每轮循环都会刷新当前脚点是否落入“交互区域”,若是,则点亮屏幕上的交互提示图标。

  • 交互触发:当交互提示点亮时,玩家按下“交互”键,单片机便将对应的对话图标编号和动画指令写入内存,屏幕随即从底部向上弹出一个对话框。
  • 显示刷新:单片机将更新后的角色坐标、对话框位置、地图状态等信息,持续写回屏幕对应的显示内存,实现流畅的动画和响应。

四、演示视频
视频展示了从开机启动、角色选择、地图移动碰撞、物体交互与对话框动画,到地图切换的全过程。
五、附件上传







本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|迪文科技论坛 ( 京ICP备05033781号-1 )

GMT+8, 2026-7-3 10:20 , Processed in 0.028609 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表