光标寻路算法实现的总结

最近一直在研究光标寻路算法,旨在实现当用户按下方向键时,系统可以自动寻找到离当前节点最近的节点,并将光标移动到新找到的节点上。

今天来聊一聊整个模块的构思。
既然是寻路,那么最重要的一部分一定是要要通过计算,来找到最近的节点。那么如何计算呢?

我们借鉴了androidTV的寻路算法。智能电视和机顶盒系统和普通的pc和手机系统差别主要体现在,pc通过鼠标,手机通过触控,都能够点击屏幕上的任意位置的按钮。而智能电视和机顶盒只能通过遥控器的方向键来控制当前选中的按钮。这种使用方式的差异导致电视和机顶盒系统会比pc和手机端的系统复杂很多。

这里找到几篇详细介绍的文章:
https://cloud.tencent.com/developer/article/1006289
https://blog.csdn.net/archer_zoro/article/details/60605578

安卓TV寻找下一个节点的大体思路是,按下方向键后,先判断有误预设的下一个节点。(这里我们先不考虑预设节点)如果没有预设节点,则系统自动通过计算寻找下一个最近的节点。安卓tv的做法是,先一层一层找到最顶层的祖先节点,在这个过程中,把所有节点的坐标都转换到祖先节点的坐标系中,然后再进行后续的计算。

针对这种模式,在我们的系统中进行了改造。我们先获取源节点的兄弟节点。在其中判断是否有符合条件的兄弟节点。

  1. 如果有兄弟节点符合条件,则所有兄弟节点进行比较,最后胜出者为目标节点
  2. 如果所有兄弟节点都不符合成为候选节点的条件,则跳出当前坐标系。把源节点的父节点当成源节点,在父节点的兄弟节点中寻找符合条件的节点。以此类推。
  3. 如果最终获胜节点还有子节点,则继续在获胜节点的子节点中寻找最优节点。

用这种方式可以有效减少对节点坐标的运算,因为我们的系统光标节点较为复杂,可能存在多种嵌套的情况,如果每个节点都要计算一遍位置的话,对机顶盒的性能消耗会比较大。

当然,我们这种方式也存在缺点。源节点会跳脱在各层坐标系之间,有时相对于自己的父节点,有时相对于自己的兄弟节点的子节点等等。这些情况会容易将节点坐标算错,出现bug。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值