一、前言

随着移动互联网时代的深入发展,人们对电子产品的体验效果要求越来越高,各种游戏体验和效果都得到很大的提升。本文主要介绍使用手机或者平板作为游戏控制器,借助近距离通信(Nearby Service),通过蓝牙和WIFI技术,实现控制大屏游戏的效果。

二、场景描述

在实际使用过程中,可以通过大屏游戏主页提供的二维码链接去下载控制器程序,游戏的所需操作都可以进行数据传输,本文主要演示如何将手机陀螺仪数据进行传输。

通过该方案,可以解决普通游戏控制器功能单一,使用成本高等问题。同时,由于无需Internet连接,不会造成额外流量消耗或者传输效果受到Internet网络质量的影响。此外,允许手机控制器程序轻松地与附近的设备(大屏游戏)进行发现、连接及数据交换,灵活支持多人同时参与同一游戏。

三、整体流程

使用手机或者平板电脑作为游戏控制器,通过集成近距离通信能力,将手机或者平板电脑中的传感器的实时数据,无线传输到显示游戏的大屏设备上,实现对游戏角色的控制。
下图中的发现端对应手机游戏控制器,广播端对应大屏游戏。双方对应的流程总体一致,都要经过:

广播扫描 -> 建立连接 -> 传输数据 -> 断开连接。

下图中广播扫描阶段,进行设备发现,需要基于BLE(低功耗蓝牙)双向广播技术。传输数据阶段,设备之间的高速传输,直接基于传统的P2P协议实现。

四、集成关键步骤说明和代码

您需要按照流程来完成应用的开发工作,完整的开发流程可以参考链接。开发准备完成后,就可以进行编码了,关键步骤及代码如下:

步骤一、开始广播

public void doStartBroadcast(View view) {Context context = getApplicationContext();mDiscoveryEngine = Nearby.getDiscoveryEngine(context);BroadcastOption.Builder advBuilder = new BroadcastOption.Builder();advBuilder.setPolicy(Policy.POLICY_STAR);mDiscoveryEngine.startBroadcasting(myNameStr, myServiceId, mConnCb, advBuilder.build());}

步骤二、开始扫描

public void doStartScan(View view) {ScanOption.Builder discBuilder = new ScanOption.Builder();discBuilder.setPolicy(Policy.POLICY_STAR);mDiscoveryEngine.startScan(myServiceId, mDiscCb, discBuilder.build());

步骤三、请求连接

private void connect(View view) {  mDiscoveryEngine.requestConnect(myNameStr, mEndpointId, mConnCb).addOnSuccessListener(new OnSuccessListener<Void>() {@Overridepublic void onSuccess(Void aVoid) {Toast.makeText(SensorActivity.this,"connect Success",Toast.LENGTH_SHORT).show();Log.d(TAG, "connect Success:");}}).addOnFailureListener(new OnFailureListener() {@Overridepublic void onFailure(Exception e) {Toast.makeText(SensorActivity.this,"connect Failure",Toast.LENGTH_SHORT).show();Log.d(TAG, "connect Failure");}

步骤四、发送数据

控制器:发送陀螺仪获取的实时数据

private void sendData(Data bytesData){    Nearby.getTransferEngine(getApplicationContext()).sendData(mEndpointId, bytesData);}

游戏大屏:接收数据

private DataCallback mDataCb =new DataCallback() {@Overridepublic void onReceived(String string, Data data) {Log.d(TAG, "onReceived, Data.Type = " + data.getType());Log.d(TAG, "onReceived, string ======== " + string);switch (data.getType()) {case Data.Type.BYTES:String str = new String(data.asBytes(), UTF_8);receiveMessage(data);break;default:Log.i(TAG, "the other Unknown data type, please check the uploaded file.");return;}}@Overridepublic void onTransferUpdate(String string, TransferStateUpdate update) {Log.d(TAG, "onTransferUpdate.Status=======" + update.getStatus());return;}}};
private void receiveMessage(Data data) {msgStr = new String(data.asBytes(), UTF_8);SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss.SSS");String dateStr = dateFormat.format(new Date());tvData.append("\n" + dateStr + msgStr);}

步骤五、断开连接

private void disconnect(){mDiscoveryEngine.disconnect(mEndpointId);}

五、效果展示

由于硬件条件限制,使用两台手机进行效果测试,一台手机用作控制器发送手机陀螺仪的实时数据,另一台设备作为游戏大屏进行数据的接收,在接收数据后,可以根据数据计算得出控制器的姿态等数据,实现对游戏的控制功能。

在两台设备距离三米左右时,发送和接收数据的对比如下:

在设备间距离差距不大时(例如相距3米或4米),数据传输的时延变化不是很大,基本都在1s以内,数据传输依旧具有实时性;即使两台手机都处在移动中,也能够为用户提供良好的使用体验。

注意,当前大部分手机蓝牙在两台设备间无大的障碍物的情况下,距离7米远时也能保证很好的传输质量,超过8米将会出现断点,超过10米会断开连接。

六、注意事项

1、此示例需要填写接收双方的设备名称,进行连接。可以根据您的需要,扫描过程中,您可以向用户展示发现的设备列表,并允许他们选择连接哪些设备。

2、此示例显示了一种扫描和连接方式(1-N或者星型连接拓扑的点到点策略)。根据您的需要,您可以使用其他两种连接方式:M-N或者网状连接拓扑的点到点连接策略,和1-1连接拓扑的点到点连接策略。三种策略适用的场景,可以参考该链接。

3、此示例传输的数据格式是字节序列(BYTES),该类型数据的长度大小不能超过32KB。可以根据您的需要,选择其他另外两种数据类型:文件(FILE)和流(STREAM)。

4、此示例手机控制器应用发送的数据是手机陀螺仪数据,未进行任何处理。可以根据您的需要,计算得出手机姿态等数据,实现对游戏角色的控制。

5、此示例中,接收双方接收数据会存在时延,该时延仅供参考,不作为近距离通信的性能的标准。


原文链接:https://developer.huawei.com/consumer/cn/forum/topic/0204428876579660015?fid=18

原作者:胡椒

借助近距离通信,实现手机作为游戏控制器掌控大屏游戏相关推荐

  1. 乐视狂推的大屏游戏生态,是否会成为又一潜力市场?

    5月31日那天,乐视在北京又双叒叕召开了一场发布会. 这场发布会推出了三款全新生态电视,按照乐视一贯的风格,这几款电视不仅都是"高体价比"的买卖,而且在配置与性能让面完全秒杀其他友 ...

  2. TCL招聘专职游戏体验师 用户体验成大屏游戏重点

    2014-05-04 18:00:45共13718阅读来源:电科技作者:李艳婷       随着我国游戏主机禁令的解除,被压制了10多年之久的电视游戏将释放出千亿级的市场规模.       据市场研究 ...

  3. c语言接水果游戏喜庆丰收,【教学设计】我爱游戏_掌控板12_接水果

    我爱游戏_掌控板_接水果 一.基本信息 作品名称我爱游戏_掌控板_接水果 作者姓名于飞 作者单位嘉善信息技术工程学校 教材名称<慧编程> 教材类型自编教材 教材简介自编校本教材,作为学生自 ...

  4. c语言 游戏控制器映射,如何在Nintendo游戏控制器上映射控件以充当PC的键盘

    步骤1:所有材料 1.收费的Nintendo视频游戏控制器(我使用了Nintendo Switch Pro控制器) 2. UCR.zip(此处下载链接) 3. vJoy(在此处下载) 4.继续操作之前 ...

  5. iphone屏幕镜像连电视_三种投屏方法,让电视电脑也能显示iPhone画面,大屏游戏视频更佳...

    使用iPhone的投屏功能可以将手机端的画面投射到电脑.电视.投影仪等设备上,实现大屏共享,看电视玩游戏体验更好. 其实在IOS11前iPhone自带的AirPlay可以实现轻松投屏.只要在同一个网络 ...

  6. android 投屏与反控,大屏也能反控手机了,type-c接口的无线投屏器带来的改变

    原标题:大屏也能反控手机了,type-c接口的无线投屏器带来的改变 大屏也能反控手机了,type-c接口的无线投屏器带来的改变 2020年9月中旬的时候,AWIND奇机type-c接口的无线投屏器隆重 ...

  7. python学英语游戏_美国大佬推荐,一边玩一边学Python编程,12个游戏轻松掌控Python...

    你还在坚持Python编程吗?如此枯燥的学习方式,靠自己的意志真的能坚持到最后吗? 放弃吧!与其辛苦的执着,不如看美国大佬推荐的Python编程闯关游戏,一边学编程一边玩游戏,以后连"吃鸡& ...

  8. 安卓眼球追踪_iPhone 11 Pro 可配合 Eyeware Beam 眼球追踪玩 PC 大屏游戏

    外媒AppleInsider报道,EyewareBeam是一款适用于iOS设备的App,它利用FaceID提供了一些追踪功能,让用户在PC上玩游戏时,可以追踪自己的眼睛或头部动作. Eyeware在C ...

  9. 乐视发布三款第4代超级电视 打造大屏游戏生态

    大公网5月31日讯 乐视今日举办"玩大的"发布会,基于全球独创的开放闭环乐视生态系统,推出三款生态电视--第4代超级电视X55(超4 X55),定价3599元标配价值149元乐视无 ...

最新文章

  1. The Third Revolution in Sequencing Technology
  2. 【错误记录】Google Play 上架报错 ( 您的应用包含违反“元数据”政策的内容 | GP 政策中心 )
  3. 重启openssl服务linux,Nginx的启动、停止与重启---linux
  4. adguard拦截规则存在哪里_AdGuard 过滤规则分享
  5. linux和mysql重点哪个_重要的MySQL 文档存储知识点扫盲
  6. 广州python平均薪资_爬取广州的python和Java薪资,为什么Python 高于Java(有代码)...
  7. OC基础--成员变量的封装
  8. 十一、 C++特性之begin()与end()
  9. 恩智浦智能车大赛2020_我院第十三届“恩智浦”杯智能车校内选拔赛宣讲会顺利举行...
  10. 孩子看动画片有啥好处?
  11. 可道云kodexplorer隐藏免费版按钮及简单修改使用方法
  12. php发送邮件教程,支持发送有附件的电子邮件-PHPMailer使用教程
  13. 像素坐标系、图像坐标系、相机坐标系、世界坐标系
  14. 2-SII--应用本包下文件写入和读取
  15. 拉卡拉智能POS终端常见的安全问题及设计要求
  16. Windows10设置开机自启动文件(或删除)
  17. 数据智能的本质和技术体系要求
  18. 谷歌翻译软件-大家都在下载的谷歌翻译软件
  19. BUUCTF Misc杂项前十二道题的思路和感悟
  20. 愿岁月静好,始于初见,止于终老

热门文章

  1. 五险一金 | 2020年个人所得税税率表
  2. VB 操作Excel
  3. 计算机系学天体物理,中科院南京天文光学技术研究所专业介绍:天体物理
  4. 6、春节到了,小明期盼收到压岁钱。他想:如果收到的钱超过1000元,那么捐助失学儿童;收到的钱在500~1000之间,那么购买航模;如果收到的钱不足500元,那么购买百科全书。
  5. 保证良好睡眠,是糖友逆糖的关键
  6. 好书 python_[好书首发]Python-Visual Quickstart Guide(第三版,最新版)
  7. 基于属性的访问控制(ABAC)定义与思考 ——企业ABAC的实施问题
  8. 威廉指标WR计算公式
  9. 如何申请Xilinx评估版本ip核license
  10. 为什么springcloud值得我们学习?