关于HMS-Core:借助近距离通信实现手机作为游戏控制器掌控大屏游戏

43次阅读

共计 3402 个字符,预计需要花费 9 分钟才能阅读完成。

一、前言

随着挪动互联网时代的深刻倒退,人们对电子产品的体验成果要求越来越高,各种游戏体验和成果都失去很大的晋升。本文次要介绍应用手机或者平板作为游戏控制器,借助近距离通信(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>() {
         @Override
         public void onSuccess(Void aVoid) {Toast.makeText(SensorActivity.this,"connect Success",Toast.LENGTH_SHORT).show();
             Log.d(TAG, "connect Success:");
         }
     }).addOnFailureListener(new OnFailureListener() {
         @Override
         public 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() {
         @Override
         public 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;
             }
         }
 
         @Override
         public 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

原作者:胡椒

正文完
 0